免费注册 查看新帖 |

Chinaunix

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

[C] 验证当accept阻塞时,有连接进来内核如何处理. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-13 09:56 |只看该作者 |倒序浏览
代码就不贴出了,比较烂.呵呵.

linux TCP网络服务器采用pre-listen模式:

main();---->socket();----->bind();----->listen();---->fork();出四个子进程----->accept();阻塞

然后从远端连接网络服务器


Jan 13 09:27:40 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,44028
Jan 13 09:27:40 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21719
Jan 13 09:27:51 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,44029
Jan 13 09:27:51 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21720
Jan 13 09:27:56 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,44030
Jan 13 09:27:56 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21721
Jan 13 09:28:03 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,44031
Jan 13 09:28:03 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21722
Jan 13 09:28:14 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,44032
Jan 13 09:28:14 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21719
Jan 13 09:37:06 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,38824
Jan 13 09:37:06 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21720
Jan 13 09:37:11 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,38825
Jan 13 09:37:11 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21721
Jan 13 09:37:12 shinco xxx: INFO:core:tcp_recv_loop: Receive Connection from 10.20.16.197 ,38826
Jan 13 09:37:12 shinco xxx: INFO:core:tcp_recv_loop: Worker PID 21722

这说明当4个子进程同时阻塞在accept时,如果有连接到来,kernel会按次序激活一个子进程来处理连接.?


Linux shinco 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux

centos52

LSB Version:        :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID:        CentOS
Description:        CentOS release 5.2 (Final)
Release:        5.2
Codename:        Final

[ 本帖最后由 linuxlixk 于 2010-1-13 10:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2010-01-13 10:13 |只看该作者
你在说啥。。。一般都是有进程通信机制的。例如,用信号

论坛徽章:
0
3 [报告]
发表于 2010-01-13 10:16 |只看该作者

回复 #2 wuexp 的帖子

四个子进程共享socket,全部accept()阻塞时,有连接进来,内核如何处理?惊群?
传说内核会随机使用一个子进程来处理,我得到的结果是内核会按次序选择子进程处理.

论坛徽章:
0
4 [报告]
发表于 2010-01-13 10:47 |只看该作者
按次序不就是随机的一种特例了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2010-01-13 10:54 |只看该作者
N个进程同时accept()
论坛上已经有前辈证实现今LINUX的内核用队列处理了
惊群早已成为历史

论坛徽章:
0
6 [报告]
发表于 2010-01-13 10:57 |只看该作者

回复 #5 safedead 的帖子

嗯.了解,打内核2.2.9以后就不存在了,我只是想用真实测试一下.

论坛徽章:
0
7 [报告]
发表于 2010-01-13 16:19 |只看该作者
原帖由 safedead 于 2010-1-13 10:54 发表
N个进程同时accept()
论坛上已经有前辈证实现今LINUX的内核用队列处理了
惊群早已成为历史


是的。就是选择一个激活。无惊群。

论坛徽章:
0
8 [报告]
发表于 2010-01-13 16:22 |只看该作者
看下内核的代码就清楚了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP