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? > > >