当前位置: 技术问答>linux和unix
关于控制并发进程数量和进程回收问题,请各位兄弟指点!急!!!!!!!
来源: 互联网 发布时间:2015-07-06
本文导语: 在进程并发控制上,我用了消息队列,感觉不太好使,请大家有什么原代码或者方法 请写上来,或者发给我lgd_hit@sina.com,还有最重要的,我想请问大家,当一个子进程结束后,是不是马上回收给父进程,还是要等待一会呀?我怎么...
在进程并发控制上,我用了消息队列,感觉不太好使,请大家有什么原代码或者方法
请写上来,或者发给我lgd_hit@sina.com,还有最重要的,我想请问大家,当一个子进程结束后,是不是马上回收给父进程,还是要等待一会呀?我怎么感觉子进程回收的很慢呀,我处理子进程僵死问题上用了signal(SIGCHLD,SIG_IGN);但是感觉进程结束很慢,请高手指点,是我进程处理上就慢,还是我的处理进程结束上有问题.
请写上来,或者发给我lgd_hit@sina.com,还有最重要的,我想请问大家,当一个子进程结束后,是不是马上回收给父进程,还是要等待一会呀?我怎么感觉子进程回收的很慢呀,我处理子进程僵死问题上用了signal(SIGCHLD,SIG_IGN);但是感觉进程结束很慢,请高手指点,是我进程处理上就慢,还是我的处理进程结束上有问题.
|
并发控制可以用信号量啊,
一个控制tcp并发的例子:
将信号量设置为子进程退出后自动复原,伪代码为:
create_sem(30) //创建初值为30的信号量,即控制并发数为30
while ( 1 ){
P_sem(1);//信号量减1
V_sem(1);//信号量加1,这两句可能不太好理解,请仔细想想,你一定会知道为什么的,注意信号量设置为子进程退出后自动复原。
accept_sock();
if ( fork()== 0)
{
P_sem(1);
...
exit(0);
}
}
感觉子进程退出慢的问题最好是把的代码贴出来
一个控制tcp并发的例子:
将信号量设置为子进程退出后自动复原,伪代码为:
create_sem(30) //创建初值为30的信号量,即控制并发数为30
while ( 1 ){
P_sem(1);//信号量减1
V_sem(1);//信号量加1,这两句可能不太好理解,请仔细想想,你一定会知道为什么的,注意信号量设置为子进程退出后自动复原。
accept_sock();
if ( fork()== 0)
{
P_sem(1);
...
exit(0);
}
}
感觉子进程退出慢的问题最好是把的代码贴出来
|
如果确认程序没问题,则可能是子进程退出太快导致看上去只有5个进程在运行,可在每个子进程退出前用sleep延时几秒再看看
|
我也觉得NC(NIECHUAN)的伪代码在子进程exit(0)之前应该V_sem(1)吧;
处理僵死进程(控制进程返回),我这有三办法:1、如你所述;2、fork()两次,产生孙子进程;3、父进程捕获自进程退出信号(父进程有信号处理函数),这个方法能捕获自进程退出状态,而前两方法不行。都可以试试。
处理僵死进程(控制进程返回),我这有三办法:1、如你所述;2、fork()两次,产生孙子进程;3、父进程捕获自进程退出信号(父进程有信号处理函数),这个方法能捕获自进程退出状态,而前两方法不行。都可以试试。
|
"我也觉得NC(NIECHUAN)的伪代码在子进程exit(0)之前应该V_sem(1)吧"
不需要,因为我说过信号量被设置为子进程退出后自动复原,即子进程中做了P_sem后,到退出时这个操作会自动取消
不需要,因为我说过信号量被设置为子进程退出后自动复原,即子进程中做了P_sem后,到退出时这个操作会自动取消
|
不会减少,你可以按上面的框架写个测试程序试试。我在多个项目中用了这样的方法,没出过问题,要不你留个mail下来,我有空把详细的道理发给你(这实在是几句话难以讲清)