Chinaunix

标题: 验证当accept阻塞时,有连接进来内核如何处理. [打印本页]

作者: linuxlixk    时间: 2010-01-13 09:56
标题: 验证当accept阻塞时,有连接进来内核如何处理.
代码就不贴出了,比较烂.呵呵.

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 编辑 ]
作者: wuexp    时间: 2010-01-13 10:13
你在说啥。。。一般都是有进程通信机制的。例如,用信号
作者: linuxlixk    时间: 2010-01-13 10:16
标题: 回复 #2 wuexp 的帖子
四个子进程共享socket,全部accept()阻塞时,有连接进来,内核如何处理?惊群?
传说内核会随机使用一个子进程来处理,我得到的结果是内核会按次序选择子进程处理.
作者: pagx    时间: 2010-01-13 10:47
按次序不就是随机的一种特例了。
作者: safedead    时间: 2010-01-13 10:54
N个进程同时accept()
论坛上已经有前辈证实现今LINUX的内核用队列处理了
惊群早已成为历史
作者: linuxlixk    时间: 2010-01-13 10:57
标题: 回复 #5 safedead 的帖子
嗯.了解,打内核2.2.9以后就不存在了,我只是想用真实测试一下.
作者: 思一克    时间: 2010-01-13 16:19
原帖由 safedead 于 2010-1-13 10:54 发表
N个进程同时accept()
论坛上已经有前辈证实现今LINUX的内核用队列处理了
惊群早已成为历史


是的。就是选择一个激活。无惊群。
作者: @sky    时间: 2010-01-13 16:22
看下内核的代码就清楚了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2