免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9989 | 回复: 22
打印 上一主题 下一主题

[C] 只用select不用epoll,还要让服务器达到要求的并发能力,开多线程好还是开多进程好? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-23 17:13 |只看该作者 |正序浏览
做服务器程序,由于select支持的最大句柄数有限,但还是想用select不用epoll,还要让服务器达到要求的并发能力。想法是这样:一个进程或线程调用一个select,比如一个select能最多支持1024个句柄,那么如果10个进程或线程就能支持到10*1024个句柄了。

用这种方式增强服务器的并发能力可行么?用线程好还是进程好?

论坛徽章:
0
23 [报告]
发表于 2013-01-24 18:07 |只看该作者
回复 22# cwlalx

看了,明白啦,谢谢~

论坛徽章:
0
22 [报告]
发表于 2013-01-24 18:01 |只看该作者
回复 21# iw1210


    那看你的需求了,不过在linux下epool绝对值得一用,另外你说的那个什么进程描述符传递的问题我给你回复了,你看看吧。

论坛徽章:
0
21 [报告]
发表于 2013-01-24 17:55 |只看该作者
本帖最后由 iw1210 于 2013-01-24 17:56 编辑

回复 20# cwlalx


我把 select 的描述符数量限制在1000以内,轮询1000个整数很快可以忽略吧。

论坛徽章:
0
20 [报告]
发表于 2013-01-24 17:52 |只看该作者
回复 1# iw1210


    你先了解一下epool,你会发现比select好多了,2G内存就能支持13万多的文件描述符,而且是事件触发式的比select的性能好。

论坛徽章:
0
19 [报告]
发表于 2013-01-24 16:54 |只看该作者
多进程,两种方法参考:
1.主进程 accept,通过unix socket传递fd给子进程,主进程要同时对子进程作负载平衡
2.多个进程通过进程锁try_lock 对listen fd作select监听accept,这个select也同时监听其它fd的读写

论坛徽章:
0
18 [报告]
发表于 2013-01-23 22:00 |只看该作者
本帖最后由 一刀。 于 2013-01-23 22:02 编辑

用多进程是可以的,listen之后,fork出10个进程,然后再select、accept,accept的套接字要设置为非阻塞方式,一旦有连接上来,10个进程都试图去accept,除了抢先执行的那个进程accept返回套接字,其他进程都返回-1,errno设置为EAGAIN或EWOULDBLOCK,如果是这个错误码,就继续select。

论坛徽章:
0
17 [报告]
发表于 2013-01-23 18:58 |只看该作者
本帖最后由 zimang 于 2013-01-23 18:59 编辑

回复 12# iw1210


    select 1024 fd a process.

论坛徽章:
0
16 [报告]
发表于 2013-01-23 18:44 |只看该作者
回复 15# JohnBull

这个我知道,所以想用多个线程分担一下啊


   

论坛徽章:
0
15 [报告]
发表于 2013-01-23 18:39 |只看该作者
An  fd_set is a fixed size buffer.  Executing FD_CLR() or FD_SET() with
a value of fd that is negative or is equal to or larger than FD_SETSIZE
will result in undefined behavior.

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP