thanks for all the suggestions guys. i ended up distributing the spawning of jobs to work around the compute taking about as long as a spawn. like this:
@everywhere function divideconquer(r)
@sync begin
if length(r)>2
m = div(length(r)-1, 2)
@spawnat r[2] divideconquer(r[2:m+1])
@spawnat r[m+2] divideconquer(r[m+2:end])
elseif length(r)>1
@spawnat r[2] foo(100)
end
foo(100)
end
end
@fetchfrom workers()[1] divideconquer(workers());