println holds an I/O lock to keep the output coherent.
it does sound incorrect for the workers to be getting spawned sequentially
On Monday, April 18, 2016 at 11:19:31 PM UTC-4, Greg Plowman wrote:
>
> 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?
>
>
>