免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 79hy
打印 上一主题 下一主题

[技术动态] 讨论:怎样在epoll中实现全工TCP??? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-09-24 09:39 |只看该作者
全双工,还是半双工应该在驱动那层处理掉了,上层不需考虑这些,读写分别起一个线程就行。只要你的代码没问题,操作系统会以最大效率处理的。

论坛徽章:
0
12 [报告]
发表于 2013-09-24 13:15 |只看该作者
本帖最后由 79hy 于 2013-09-24 13:16 编辑
hanxin83 发表于 2013-09-24 09:16
同没有理解什么叫"同时读写"...


全双工就是 对一个socket同时读写。  比如1个fd,用2个线程,1个线程读,1个线程写,并行。

epoll是单线程的,监听了读写事件后,在同一时间操作fd,要不只能读,要不就只能写。这就是半双工。

我说的你们能理解吗?

论坛徽章:
0
13 [报告]
发表于 2013-09-24 13:18 |只看该作者
回复 6# solu


    epoll注册了读写事件后只能在同一事件单一的读或者写。不能同时读写。所以这是半双工。

论坛徽章:
0
14 [报告]
发表于 2013-09-24 13:21 |只看该作者
回复 5# egmkang


    同时就是想 如果有个场景是读写都比较频繁的时候,效率高点。让tcp真正的全双工。

论坛徽章:
0
15 [报告]
发表于 2013-09-24 13:23 |只看该作者
回复 7# kdkgod


    你的方法还是半双工的。而且频繁的去操作epoll,增加或减少事件,会很降低效率的。

论坛徽章:
0
16
发表于 2013-09-24 13:25
回复 8# 李营长


    哈哈。非常感谢你的经验。但是如果只是shutdown read或write呢?

论坛徽章:
324
射手座
日期: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
17 [报告]
发表于 2013-09-24 13:55 |只看该作者
79hy 发表于 2013-09-24 13:15
全双工就是 对一个socket同时读写。  比如1个fd,用2个线程,1个线程读,1个线程写,并行。

epoll是 ...


两个线程各自epoll,一个关心读,一个关心写,这样就能做到你要求的全双工了

论坛徽章:
0
18 [报告]
发表于 2013-09-24 14:17 |只看该作者
回复 17# hellioncu


    虽然epoll的函数号称是“线程安全”的,不过我还是遇到了多线程操作问题。在RHEL6.0上面遇到的。正确的操作应该是在一个线程里epoll_wait,epoll_ctl,在其它的线程里recv/send

论坛徽章:
324
射手座
日期: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
19 [报告]
发表于 2013-09-24 14:20 |只看该作者
李营长 发表于 2013-09-24 14:17
回复 17# hellioncu


那估计是连接断开、建立的时序没处理好,我说的方式有这样用过,没问题

论坛徽章:
0
20 [报告]
发表于 2013-09-24 14:25 |只看该作者
回复 19# hellioncu


    在unbuntu12和suse上测试是ok的,测echo时一秒能处理上万个请求。但是上了rhel以后就傻逼了,不清楚具体原因。 最后建立了多个线程,每一个有自己的epoll池,每个线程只操作自己的epoll,同时read/write,这样就工作得很稳定了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP