免费注册 查看新帖 |

Chinaunix

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

[C] epoll+线程池web 测试结果。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-02-21 15:45 |只看该作者
回复 9# linux_c_py_php


    监听线程的epfd,wait到新句柄有读时,直接把这个新句柄传给工作线程了。同时,在epfd池中,我把这个新句柄给DEL了。。。然后在工作线程中对这个新句柄进行读和写。


   PS:
   工作线程拿到sockfd描述符后,如果用非阻塞socket句柄,写大文件的时候特别麻烦。。。不好处理。。 ,我直接把socket句柄变回阻塞,进行读取的。。不知道影响大不。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
12 [报告]
发表于 2013-02-21 15:49 |只看该作者
本帖最后由 linux_c_py_php 于 2013-02-21 15:50 编辑

还是没听懂...

1, 监听线程怎么把socket传给工作线程的? 一个socket queue对吗.

2, 然后一个工作线程掌管一个socket还是多个socket?

3, 然后一个工作线程一个epoll fd, 还是多个工作线程共用一个?

论坛徽章:
0
13 [报告]
发表于 2013-02-21 15:52 |只看该作者
本帖最后由 bio_tt 于 2013-02-21 15:54 编辑

回复 12# linux_c_py_php


    我放代码在前面了。。你瞅瞅

   struct data{
     int fd;  //存放句柄
     struct data *next;
   }

主线程监听到,就accpet,然后将句柄存入这个结构中,而工作线程取这链表头。操作。
一个工作线程任意时刻只能处理一个句柄,处理完了,然后才能接着取下一个句柄,进行处理。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
14 [报告]
发表于 2013-02-21 16:14 |只看该作者
这么说你的程序就是个one client per thread, 只是监听那里用了epoll啊, 这样肯定性能不行啊.

论坛徽章:
0
15 [报告]
发表于 2013-02-21 16:16 |只看该作者
回复 14# linux_c_py_php


    对。怎样改进呢。比较好。是不是也要把epoll带入到工作线程?咋弄比较好呢。

论坛徽章:
0
16 [报告]
发表于 2013-02-21 17:34 |只看该作者
回复 14# linux_c_py_php


    我建了2个epfd,然后建了10个工作线程,其中任意5个工作线程共享一个epfd,然后每个线程都监听,并将新的连接加入到epfd中,测试起来,效果果然要好点了。

论坛徽章:
0
17 [报告]
发表于 2013-02-22 10:48 |只看该作者
这个讨论不错,希望最终能有一个哪怕是简单的分析、总结,说明具体是什么问题、根源、解决办法等
回复 1# bio_tt


   

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
18 [报告]
发表于 2013-02-22 11:00 |只看该作者
epoll_ctl是线程安全的, 直接可以从监听线程epoll_ctl添加到工作线程.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP