采用多进程是否能得到更多的CPU时间?
需要在底层完成一个服务程序,完成多个任务,一个任务是从驱动采集摄像头的视频数据,一个任务是向远程客户端发送视频数据,一个任务是对视频码流进行编码操作,还有一个任务是实现本地的视频输出显示,这四个任务可以使用多线程方案来实现,每个线程执行一个任务,也可以使用多进程来实现。
用多线程,则内存空间是直接共享的,这样不用在进程之间采用管道/共享内存的方式在各个任务之间传递数据,编程更容易,数据共享效率更高。
用多进程,可以使每个任务相对独立些,同时在考虑, 如果采用多个进程,是否会使得每个任务能够得到更多的CPU时间呢? 如果能,这样是否设计更好一些呢?
乐园的厨师长
12 years, 3 months ago
Answers
先回答问题:采用多进程不会让每个任务得到更多的时间,建议使用多线程。
原因:
1、时间片:在大多数现代操作系统中,基本都是面向线程进行调度时间片的,即便是你创建一个单独的进程,操作系统也会为该进程分配一个主线程,然后和系统中其他线程一样进行统一调度。
2、通信:在多线程条件下,由于内存是共享的,所以可以直接在多线程中互相共享数据,而对于进程来说,要共享数据通常是把数据复制一份通过pipe之类的方法传递过去,性能差别显而易见。
3、为什么还有人用进程:这是因为线程虽然效率更高,但是线程安全是一个大问题,尤其是在使用很多第三方库的时候,如果不能确定哪些数据结构是线程安全的,就不要使用(这也是Python为何引入GIL的原因)。而使用多进程,由于内存相互独立,所以不必担心单个进程的数据被其他进程污染。
所以,在你的场景下多进程并不能带来更多的好处,如果你能很好的把握线程安全,非常建议使用多线程。
ljzasx
answered 12 years, 3 months ago