免费注册 查看新帖 |

Chinaunix

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

关于linux的多线程主干问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-04-09 15:53 |显示全部楼层

回复 #1 linPower 的帖子

小弟认为,能简单就简单。别把问题搞复杂。
比如,楼主大大使用常规做法,利用线程库提供的一大堆函数来完成调度。
完全没有必要。
最简单的做法,用全局数组,分别与每个线程对应。
给这个数以不同含义,通过修改这个数值,就可以达到控制线程的目的。
比如:int status[100];//0:start,1:start_recv,2:recv_ing,3:recv_end.4:........
通过这个值的变化,就简单的控制了每个线程的动作。
这么简单做的事为什么要搞那么复杂。
线程同步什么的都可以这么做。注意互斥就行了。
另外,可以使用线程函数的入口参数,来达到你要做的目的。
最后,说点题外的,个人觉得不要启动关闭线程过于频繁。最好启动的线程,通过传递参数,来完成相应任务。即使任务结束,也不要把线程结束,可以留待以后新的任务的到来,继续使用该线程。目前看到的Stevens的几本经典书籍的。它的网络模型并不好。太过于简单,来一个连接,为他启动一个新的线程,或者进程。对于资源与效率都是巨大的消耗。完全没有考虑线程一起一关的开销。当然,他的做法很经典的,对于简单初级应用,绝对没问题。

小弟现在使用的模型,是使用线程池,即一开始会启动很多线程,线程组分为不同功能,可以有专门处理接收的线程,也有专门查询连接状态的线程。也有一种说法连接池,应该就是这样吧。
当然现在linux2.6的核的epoll效率比select好多了。模型还可以再变,也没必要复杂。nginx就是使用epoll实现了5万同时在线,效率不降低,看了一下它的核心,也是很简单。
小弟可能说的有点跑题,说多了,总之,线程调度,不要想的复杂了。常规做法在小弟眼里是复杂的。
最后,小弟也不是啥牛人,只不过平时都这么做。仅供参考。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP