在多进程中需要创建一个任务进程进行待处理任务的分发工作。也就是说,需要在主进程中detach剥离出一个进程,且该子进程独立于主进程,进行独立的任务发送。如果是单纯在主进程中fork一个子进程的话,如果进行了wait等待操作,那么该任务进程就失去了独立性,无法实现边取任务边分发任务。而如果是不进行wait等待操作的话,那么子进程可能也会执行后续创建多个处理任务的进程,使得出现的并行进程数量为预期的double。当然这也是可以通过在并发多进程wait之前对任务分配进程进行wait操作来达到预期要求。本文采取两种方式来实现任务分配进程和任务处理进程的共存。
双fork方式,以孙进程作为detach主进程的任务分配进程,由于该进程是游离于主进程的,所以其回收是通过系统实现的。
如果采用主进程直接fork一个子进程作为任务分配进程的话,该任务分配子进程也会执行后期的任务处理进程的多进程创建,使得并行的进程数是预期的double。 且由于主进程的等待操作并没有考虑到这多出来的一倍进程,导致这部分进程没有退出,僵死状态。同时,任务分配进程也没有退出。所以此时通过ps命令查看,发现进程数为7(=5并行进程+2(任务分配进程和主进程)) 并行执行过程输出界面信息: ps查看进程情况: 可以查看对应的进程号是与上面多出来的一倍进程相对应的。
通过主进程fork一个子进程作为任务分配进程。主进程创建多个并发的任务处理进程。且在主进程wait各个任务处理进程之前进行一次任务进程的wait操作,使得任务进程得以回收,再进程并发进程的wait操作。
新闻热点
疑难解答