On 15/10/2012 09:47, Michael Snoyman wrote:
> With the program at the end of this email, I would expect that, once per
> second, I would get a message printed from each forkIO'd green thread,
> the forked process, and the master process. And if I spawn 8 or less
> child threads that's precisely what happens. However, as soon as I up
> that number to 9, the child process is never run. The process is,
> however, created, as can be confirmed by looking at the process table.
FWIW I can reproduce this problem. The strace in both cases is very
different. In the non threaded runtime, everything works as you expect:
7519 select(2, [], [1], NULL, {0, 0}) = 1 (out [1], left {0, 0})
7519 write(1, "starting child\n", 15) = 15
7519 select(2, [], [1], NULL, {0, 0}) = 1 (out [1], left {0, 0})
7519 write(1, "(7519,\"child\",0)\n", 17) = 17
7519 timer_settime(0x3, 0, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
7519 select(0, [], [], NULL, {0, 999994} <unfinished ...>
7519 <... select resumed> ) = 0 (Timeout)
7519 timer_settime(0x3, 0, {it_interval={0, 10000000}, it_value={0,
10000000}}, <unfinished ...>
7519 <... timer_settime resumed> NULL) = 0
7519 select(2, [], [1], NULL, {0, 0} <unfinished ...>
7519 <... select resumed> ) = 1 (out [1], left {0, 0})
7519 write(1, "(7519,\"child\",1)\n", 17 <unfinished ...>
In the threaded case, it:
* closes FD 3,4,5,6
* epoll_create, pipe, all kind of things
* clones twice
* ???
It seems that forkProcess is implemented entirely differently in the
threaded runtime.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe