有谁能解释一下这是如何运作的?
如果我的代码中有类似
的内容tweet id tweet created minute Game start minute Game end minute
1001 145678 145600 145730
1002 145678 145600 145730
1005 145680 145600 145730
12278 145687 145600 145730
765558 145688 145600 145730
724323 145689 145600 145730
875857 145688 145600 145730
79375 145685 145600 145730
84666 145686 145600 145730
335556 145687 145600 145730
29990 145688 145600 145730
56 145689 145600 145730
968867 145690 145600 145730
8452 145691 145600 145730
1334 145679 145600 145730
我不会再创造N个孩子,然后在每个孩子中再次N个孩子并最终成为一个循环吗?
答案 0 :(得分:5)
来自http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html(强调我的):
创建新子进程后,两个进程将执行fork()系统调用后的下一条指令。
因此,fork()
创建一个子节点,子节点不从循环开始处开始:它从调用fork
之后的指令开始,即从{{1}开始这对孩子来说是真实的。然后它将做某事,然后if(pids[i]==0){
。中断意味着它退出break
循环,因此子进程不再创建进程。
所以,父亲创造了N个孩子,而每个孩子都做了工作,在没有创造更多孩子的情况下从循环中休息。
答案 1 :(得分:4)
我不会创造N个孩子吗
是
然后在每个孩子N个孩子再次
不,为什么?每个子进程都执行for
并离开循环。没有创建进一步的流程。
并以循环结束?
即使你没有那个break;
,每个孩子也只会执行break;
循环的其余部分。它不会从for
重新启动。这意味着在每次迭代中,进程数量都会翻倍,因此您最终会得到i = 0
个进程。但是使用2^N
,它只是简单的break;
。