- 论坛徽章:
- 0
|
最近一直在思考,是用多线程编程好,还是用单线程select复用的方法好。
评价的方法是能获得多少CPU时间。
思考如下:
假设系统运行后有N个进程。
这时需要完成一个任务。可以考虑再启用M个进程,一个进程M个线程,一个进程用select复用。
如果启用M个进程来完成服务。每个进程可以获得1/(M+N)的时间片。
如果启用一个进程,有M个线程。每个线程获得时间为1/(N+1) * 1/M 的时间片。一个进程的时间片还要被M个线程分用。
如果采用一个进程,用select进行复用。如果最多有M个sockfd被选中,那么每个sockfd获得的时间范围为
[1/(N+1)*1/M,1/(N+1)],最小为1/(N+1)*1/M,M个sockfd都被选中;最大为1/(N+1), 只有一个sockfd被选中。
这样看来,用select进行复用可以获得最大的时间片,多个进程居中,同时启用多个线程获得时间片最少。
不知这样的思考是否合适。
讨论的关键放在单线程select进行复用,同时启用多个线程吧。
多进程的系统开销太大。
只是想到了多进程,就写上去了。
小弟知道坛子里高人多,不过
最好是讨论单CPU的情况。
小弟没机会接触多CPU
实际中我的做法是启动一个主线程负责accept,另外的线程在没有连接到来时用条件变量阻塞。阻塞的时候不会消耗CPU时间。
有连接到来唤醒阻塞的线程处理,主线程和其他线程都使用select模型。
[ 本帖最后由 wlia 于 2009-7-22 09:47 编辑 ] |
|