免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8970 | 回复: 10

多线程select/epoll问题 [复制链接]

论坛徽章:
0
发表于 2010-12-01 09:39 |显示全部楼层
有个tcp gate需要同时处理大约3万的并发连接,然后把从客户端发来的资料转发给内部的一个server(只有一个socket跟内部服务器连接), 开N个线程处理客户端的数据读写与加密解密处理,下列哪种方式比较好,多谢多谢!

1, 只有一个线程去select/epoll所有fd,有读写事件后再分发给另外的N-1个线程;

2,每个线程自己去select/epoll 一组自己的fd;

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2010-12-01 09:46 |显示全部楼层
我觉得2好,这样每个线程对等的,代码也少

论坛徽章:
0
发表于 2010-12-01 11:25 |显示全部楼层
1再改进一下好, 不能直接交给n-1个线程,而是设置一个线程池,这样不会造成由于太多的连接把cpu撑满.
2的话在连接数不多的情况下还是不错的,但是如果同时处理的线程数超过cpu处理能力的极限时就头疼了.

论坛徽章:
0
发表于 2010-12-01 11:46 |显示全部楼层
1,使用epoll,逻辑任务交给线程池处理
其实我觉得,多进程+epoll不错~~

论坛徽章:
0
发表于 2010-12-01 13:22 |显示全部楼层
select的时候应该把所有的fd都会遍历一遍的吧?

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2010-12-01 16:42 |显示全部楼层
本帖最后由 yulihua49 于 2010-12-01 16:56 编辑
1,使用epoll,逻辑任务交给线程池处理
其实我觉得,多进程+epoll不错~~
ayw215 发表于 2010-12-01 11:46



    正解。我现在正在写这个框架。
30000-60000个CLIENT_ID,
他们的socket fd在epoll等待。激活的交线程池队列,由一定数量的线程(CPU数×2)处理,输出端(内网)建立连接池,以一定数量的连接接内网服务器。
是一个安全网关+应用路由,内网有N个连接池,通往N个方向,每个不同方向配有若干连接。内网连接故障可自动修复。(内网服务器故障后,网关服务器不必重启,内网恢复后网关自动恢复)
可配置的加密压缩方案,可定制的认证方案。具有强大的抗攻击能力,在通信的任何阶段,收到任何不符合规定的数据,立即作为攻击包记录日志并切断连接。任何情况都不会被打死。

论坛徽章:
0
发表于 2010-12-01 16:57 |显示全部楼层
正解。我现在正在写这个框架。
30000-60000个CLIENT_ID,
他们的socket fd在epoll等待。激活的 ...
yulihua49 发表于 2010-12-01 16:42

框架开源不

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2010-12-01 18:00 |显示全部楼层
框架开源不
ayw215 发表于 2010-12-01 16:57



    还没写完呢。
开源。
请关注SDBC-安全数据库连接。是它的一部分。
现在已实现线程池服务器框架。
也实现了多线程+连接池框架。
但线程池+连接池框架正在写,比起多线程+连接池,还是有许多麻烦要处理的。
估计两周以后出结果。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2010-12-10 13:39 |显示全部楼层
框架开源不
ayw215 发表于 2010-12-01 16:57



   今天已经调通了,下一步进行强壮度的调试。

论坛徽章:
0
发表于 2010-12-10 14:05 |显示全部楼层
我想用多线程,有以下两点考虑:

1,每个线程工作负载个数尽量差不多
2,想后端的server尽量少处理socket连接,也就是同样的数据少发几个socket

要实现上面两个目标线程更加方便简单
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP