免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-09 10:48 |只看该作者 |倒序浏览
5可用积分
最近在看《UNIX高级环境编程》,对于进程控制,线程控制的内容比较迷茫。特别是线程控制,涉及到很多线程的属性。感觉内容又多又杂,在此希望高手指导一下,如何去理解进程控制,多线程编程,以及这两种技术对于网编编程的重要性。例如并发服务器这类的。

论坛徽章:
0
2 [报告]
发表于 2009-04-09 11:00 |只看该作者
没啥好说的其实,自己写个进程池,线程池就知道了

PS:可以去看看UNP V1

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2009-04-09 11:23 |只看该作者

回复 #1 linPower 的帖子

在你不了解一种技术的用途时,学习理论一般都会比较迷茫,此时就需要实践,比如通过网络编程实践,可以参考UNPV1
Chapter 30. Client/Server Design Alternatives

Section 30.1.  Introduction

Section 30.2.  TCP Client Alternatives

Section 30.3.  TCP Test Client

Section 30.4.  TCP Iterative Server

Section 30.5.  TCP Concurrent Server, One Child per Client

Section 30.6.  TCP Preforked Server, No Locking Around accept

Section 30.7.  TCP Preforked Server, File Locking Around accept

Section 30.8.  TCP Preforked Server, Thread Locking Around accept

Section 30.9.  TCP Preforked Server, Descriptor Passing

Section 30.10.  TCP Concurrent Server, One Thread per Client

Section 30.11.  TCP Prethreaded Server, per-Thread accept

Section 30.12.  TCP Prethreaded Server, Main Thread accept

Section 30.13.  Summary

论坛徽章:
0
4 [报告]
发表于 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万同时在线,效率不降低,看了一下它的核心,也是很简单。
小弟可能说的有点跑题,说多了,总之,线程调度,不要想的复杂了。常规做法在小弟眼里是复杂的。
最后,小弟也不是啥牛人,只不过平时都这么做。仅供参考。

论坛徽章:
0
5 [报告]
发表于 2009-05-07 13:37 |只看该作者
楼上说的有道理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP