免费注册 查看新帖 |

Chinaunix

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

请问个关于多线程服务器中各线程访问线程池的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-21 19:46 |只看该作者 |倒序浏览
一个多线程的socket服务器程序,每个线程的数据都通过一个线程池内的线程进行处理。如果被处理的线程通过使用互斥锁避免共享数据被修改的话,执行效率不高。
请问这个情况下该用什么方法提高效率呢?
个人猜想:在一个线程访问进程池时阻塞其他线程,处理完后调用pthread_cond_broadcast唤醒在这个Condition Variable上等待的所有线程。不知道这样是否有效?

希望大家不吝赐教,谢谢!

论坛徽章:
0
2 [报告]
发表于 2009-04-22 08:18 |只看该作者

回复 #1 uyucn 的帖子

楼主大大你说的效率不高是一个什么概念嘛?
锁是肯定需要的,没法避免,提高效率的办法就是尽量使锁里锁的内容(代码)少。
比如:你有一个接收数据的线程,那他一接收到数据就直接把数据拷贝一份给处理线程组中的某一个线程,也就是锁只锁拷贝一个地方,效率最高,小弟使用过程,感觉也就这样了。相反,如果你这个接收的地方还要有一大堆处理程序,锁了一大堆内容,那效率自然就降低,搞得像是单一线程似的。都没必要用线程了。
小弟做法是,就举小弟接收数据的部分来说,接收会有一组线程来完成,一个线程开始接收后,同组下一个线程自动处于等待接收状态,这样也算是一个提高效率的一个方法吧。
供楼主参考。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
3 [报告]
发表于 2009-04-22 08:33 |只看该作者
socket服务器程序用多路转发才是主流

论坛徽章:
0
4 [报告]
发表于 2009-04-23 00:30 |只看该作者
谢谢两位兄台的指点
这是我在面试时被问到的一个问题
没GOOGLE出来

他是说在服务器端有许多个线程(或许是多线程池?),这些多个线程的数据都依靠一个单线程池来处理。
现在的问题是由于使用互斥锁的缘故,程序执行效率受到影响,如何才能提高程序的执行效率?

如果我没理解错的话应该就是这样子了,据说是大多数多线程服务器的实现原理。
在下才疏学浅,还请各位高人帮忙解惑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP