moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1580回复:10

关于linux线程的问题(好难的样子,30分,。。。不会让我去看源码吧!)

楼主#
更多 发布于:2002-12-16 13:27
关于linux线程。

socket server程序,用pthread_create生成线程。一切动作都正常。
有一个关于线程数的现象我解释不清楚:
1。刚启动时系统只有一个线程,
2。接入一个client后,系统出现三个线程。
3。再断掉这个client后,系统有2个线程。
4。这之后,系统总会维持两个线程。

我的问题是,断掉client后,系统为什么总会维持两个线程。

有一个据说是管理线程。

哪位能提供一点, 关于这个问题的原理方面的资料,或者说明?

我用的看线程的工具是top 还有 ps aux

谢谢。


[编辑 -  12/16/02 by  moqingsong]
按第一贴的“给分”键,给分。
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-16 16:53
看源码去 :(
按第一贴的“给分”键,给分。
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-16 16:54
这2个线程是什么状态?
moqingsong
论坛版主
论坛版主
  • 注册日期2002-04-07
  • 最后登录2011-02-03
  • 粉丝0
  • 关注0
  • 积分74分
  • 威望71点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-16 18:35
这2个线程是什么状态?

都正常呀。
我就是原理不明白。 :(
按第一贴的“给分”键,给分。
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-17 16:41
这段话不知有无用?
Linux Socket应用中,服务器一般是接收客户端的服务请求,服务器在读取客户端发送的数据时,很容易判断客户端连接是否有效(FD_SET/select/recv等)。但是,当服务器向客户端发送数据时,无法通过上述工具判断客户端连接是否有效(也尝试过利用信号机制,未成功),在远程客户端连接失效后,向其发送适量数据并不会产生错误(send/write返回正确),这是Socket缓冲惹的祸。若发送的数据量超出Socket缓冲的容量,会导致服务器程序崩溃。

生命驱动,活力无限!
right_wind
驱动中牛
驱动中牛
  • 注册日期2001-10-12
  • 最后登录2018-05-29
  • 粉丝1
  • 关注0
  • 积分60分
  • 威望66点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-12-18 08:55
ydyuse提供的好像不能解释这个问题,我也碰到过同样的问题,好像只有在进程结束以后,线程才都会退出,但不影响我的程序的运行。
good good study, day day up。
lock_welbert
驱动牛犊
驱动牛犊
  • 注册日期2002-04-10
  • 最后登录2004-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-10 15:34
我一直在做多线程的编程工作,linux的多线程其实还是进程,轻量级的进程,所以,程序中除了主线程之外,你生成几个线程就是几个线程,用ps -aux看也应该没有问题的
lifeng
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2010-07-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-21 12:48
linux下只有进程和系统线程的概念,无用户线程的概念,一般用户线程是通过用户态的lib中实现
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-03 00:56
你的这个问题的最好的解决方法实际上真的在于去看pthread实现的源码,因为这依赖于他的具体实现。
目前libpthread中的实现应该是1:1的实现,因此管理线程这一说可能并不确切,但也有可能用来管理thread相关的mutex。
关于linux线程。

socket server程序,用pthread_create生成线程。一切动作都正常。
有一个关于线程数的现象我解释不清楚:
1。刚启动时系统只有一个线程,
2。接入一个client后,系统出现三个线程。
3。再断掉这个client后,系统有2个线程。
4。这之后,系统总会维持两个线程。

我的问题是,断掉client后,系统为什么总会维持两个线程。

有一个据说是管理线程。

哪位能提供一点, 关于这个问题的原理方面的资料,或者说明?

我用的看线程的工具是top 还有 ps aux

谢谢。


[编辑 -  12/16/02 by  moqingsong]
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
ghc
ghc
驱动牛犊
驱动牛犊
  • 注册日期2002-06-13
  • 最后登录2009-08-12
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-06 08:43
这个问题,你可以去看一下pthread prime的一本书,里面有一章讲到了这个问题。大概的意思是说线程的调度和实现有很多模式,各个系统的实现不尽相同。比如在linux下,并不是说用户创建一个线程系统就只产生一个线程,可能你创建了5个线程,系统中只有4个线程也未可知。这只是一个系统实现策略的不同,对于用户来说没必要太关心。
bonze2000
驱动牛犊
驱动牛犊
  • 注册日期2002-11-13
  • 最后登录2003-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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个进程存在。好好分析一下你的程序设计。
游客

返回顶部