阅读:1580回复:10
关于linux线程的问题(好难的样子,30分,。。。不会让我去看源码吧!)
关于linux线程。
socket server程序,用pthread_create生成线程。一切动作都正常。 有一个关于线程数的现象我解释不清楚: 1。刚启动时系统只有一个线程, 2。接入一个client后,系统出现三个线程。 3。再断掉这个client后,系统有2个线程。 4。这之后,系统总会维持两个线程。 我的问题是,断掉client后,系统为什么总会维持两个线程。 有一个据说是管理线程。 哪位能提供一点, 关于这个问题的原理方面的资料,或者说明? 我用的看线程的工具是top 还有 ps aux 谢谢。 [编辑 - 12/16/02 by moqingsong] |
|
|
沙发#
发布于:2002-12-16 16:53
看源码去 :(
|
|
|
板凳#
发布于:2002-12-16 16:54
这2个线程是什么状态?
|
|
地板#
发布于:2002-12-16 18:35
这2个线程是什么状态? 都正常呀。 我就是原理不明白。 :( |
|
|
地下室#
发布于:2002-12-17 16:41
这段话不知有无用?
Linux Socket应用中,服务器一般是接收客户端的服务请求,服务器在读取客户端发送的数据时,很容易判断客户端连接是否有效(FD_SET/select/recv等)。但是,当服务器向客户端发送数据时,无法通过上述工具判断客户端连接是否有效(也尝试过利用信号机制,未成功),在远程客户端连接失效后,向其发送适量数据并不会产生错误(send/write返回正确),这是Socket缓冲惹的祸。若发送的数据量超出Socket缓冲的容量,会导致服务器程序崩溃。 |
|
|
5楼#
发布于:2002-12-18 08:55
ydyuse提供的好像不能解释这个问题,我也碰到过同样的问题,好像只有在进程结束以后,线程才都会退出,但不影响我的程序的运行。
|
|
|
6楼#
发布于:2003-02-10 15:34
我一直在做多线程的编程工作,linux的多线程其实还是进程,轻量级的进程,所以,程序中除了主线程之外,你生成几个线程就是几个线程,用ps -aux看也应该没有问题的
|
|
7楼#
发布于:2003-02-21 12:48
linux下只有进程和系统线程的概念,无用户线程的概念,一般用户线程是通过用户态的lib中实现
|
|
8楼#
发布于:2003-03-03 00:56
你的这个问题的最好的解决方法实际上真的在于去看pthread实现的源码,因为这依赖于他的具体实现。
目前libpthread中的实现应该是1:1的实现,因此管理线程这一说可能并不确切,但也有可能用来管理thread相关的mutex。 关于linux线程。 |
|
|
9楼#
发布于:2003-03-06 08:43
这个问题,你可以去看一下pthread prime的一本书,里面有一章讲到了这个问题。大概的意思是说线程的调度和实现有很多模式,各个系统的实现不尽相同。比如在linux下,并不是说用户创建一个线程系统就只产生一个线程,可能你创建了5个线程,系统中只有4个线程也未可知。这只是一个系统实现策略的不同,对于用户来说没必要太关心。
|
|
10楼#
发布于:2003-03-10 22:08
linux是用进程方式来模拟线程的。你的程序启动后,应该有一个主进程。假设你作socket listening的server,当有一个连接请求到你的server,就会通过pthread_create创建一个进程保持此连接。那么用ps -ef看就会有2个进程存在。不会出现3个进程。如果不是2个一定是你程序设计有问题。这点我可以确定。以前我在linux上做过一个radius server,启动时就创建一个50个线程的线程池。用ps -ef看一共有51个进程存在。好好分析一下你的程序设计。
|
|