当前位置: 技术问答>linux和unix
这种情况用多线程好还是用守护进程?
来源: 互联网 发布时间:2016-12-31
本文导语: 要实现的目标如下: 创建一个生产线程,不停的进行生产,数据来了就简单的存储到队列的尾部,然后通知消费线程 创建一个消费线程,这个和生产线程异步(速度尽快),处于阻塞状态,来了信号,就循环从队列头...
要实现的目标如下:
创建一个生产线程,不停的进行生产,数据来了就简单的存储到队列的尾部,然后通知消费线程
创建一个消费线程,这个和生产线程异步(速度尽快),处于阻塞状态,来了信号,就循环从队列头取直到队列为空,就挂起
然后还想创建一个主线程,进行显示信息,然后可以输入控制,暂停,恢复,结束什么的
问题:
生产线程过程函数中有一阻塞函数,我创建生产线程之后sleep,线程马上就退出了,貌似是没执行到阻塞函数,如果用了wait,控制台终端的显示就一直被这个线程占用。如果用守护进程的话又涉及进程通讯问题。
谢谢!
创建一个生产线程,不停的进行生产,数据来了就简单的存储到队列的尾部,然后通知消费线程
创建一个消费线程,这个和生产线程异步(速度尽快),处于阻塞状态,来了信号,就循环从队列头取直到队列为空,就挂起
然后还想创建一个主线程,进行显示信息,然后可以输入控制,暂停,恢复,结束什么的
问题:
生产线程过程函数中有一阻塞函数,我创建生产线程之后sleep,线程马上就退出了,貌似是没执行到阻塞函数,如果用了wait,控制台终端的显示就一直被这个线程占用。如果用守护进程的话又涉及进程通讯问题。
谢谢!
|
守护进程的特点是声明周期在是从开机到关机。
如果你的数据在开机和关机这段时间内一直要出于待命状态,你可以使用守护进程。守护进程实际上就是服务进程。后台运行。
如果你的数据在开机和关机这段时间内一直要出于待命状态,你可以使用守护进程。守护进程实际上就是服务进程。后台运行。
|
就是普通的多线程程序而已……不要守护进程
|
看你的说法,
首先 你这个生产者线程,本身也是一个消费者,因为它要等数据来了才进行存储和通知。
为了简化问题,假定你的生产者线程为固定时间间隔进行生产,比如5秒生产一个东西
则你应该这样写
伪代码:
1, 创建生产者线程,消费者线程,控制线程
2,生产者线程入口函数
do{
if(控制退出)
break;
进行生产(比如耗时5秒 sleep(5000));
生产完成要give一个信号量;
}while(1);
3,消费者入口函数
do{
if(控制退出)
break;
take信号量;(take不到会阻塞)
进行消费;
}while(1);
4,控制线程
do{
接受键盘消息;
根据消息执行判断,采取控制
}while(1);
5,对以上3个线程开始调度。
OK了
写的很简陋,见谅
首先 你这个生产者线程,本身也是一个消费者,因为它要等数据来了才进行存储和通知。
为了简化问题,假定你的生产者线程为固定时间间隔进行生产,比如5秒生产一个东西
则你应该这样写
伪代码:
1, 创建生产者线程,消费者线程,控制线程
2,生产者线程入口函数
do{
if(控制退出)
break;
进行生产(比如耗时5秒 sleep(5000));
生产完成要give一个信号量;
}while(1);
3,消费者入口函数
do{
if(控制退出)
break;
take信号量;(take不到会阻塞)
进行消费;
}while(1);
4,控制线程
do{
接受键盘消息;
根据消息执行判断,采取控制
}while(1);
5,对以上3个线程开始调度。
OK了
写的很简陋,见谅
|
sleep之后线程只是回到blocked状态而已,到了时间就会重新执行,而你的线程sleep之后退出,肯定有问题