I 'm somewhat confused about when @async tasks switch.
My understanding was tasks would yield on a blocking operation such as IO.
On 0.4.1, I started multiple workers on remote hosts asynchronously, and
these started as I expected.
Presumably the tasks launching the workers yielded when the command to
start the worker was issued:
io, pobj = open(detach(cmd), "r")
On 0.4.5, workers are started one host at a time (all workers on a host are
started before moving on to the next host), suggesting the launching tasks
are not yielding.
Is this a reasonable assumption?
At this stage, I assumed something changed between 0.4.1 and 0.4.5 which
affected task yielding/switching.
I was further confused when I tried setting up a minimal example using
println(), which I thought would yield:
function Test()
@sync begin
for task = 1:5
@async begin
for job = 1:5
println("task.job = $(task).$(job)")
#sleep(5)
#yield()
end
end
end
end
end
On both 0.4.1 and 0.4.5 Test() produces output in task order, suggesting no
yielding.
Explicit call to sleep or yield works as expected, producing output in job
order.
In any case, it seems something has changed between 0.4.1 and 0.4.5 wrt
yielding when issuing commands?
Should detach(cmd), where cmd starts a worker on remote host, yield?