找回密码
 注册
关于网站域名变更的通知
查看: 271|回复: 1
打印 上一主题 下一主题

学习Linux网络编程(三)高级并发服务器

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-19 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在上一节,我们介绍了Linux简单的并发服务器,通过在服务器端建立多个子进程,来接收客户端的请求,实现并发处理,但这种方式明显有缺陷,服务器并不知道客户端请求的数量,所以事先建立的进程数不好确定。所以,这里介绍三种高级并发服务器模式。第一种是服务器端统一accept,接收客户端的到来,然后为每个客户端分配一个进程去处理. 第二种是统一accept接收请求,然后为每个客户端分配一个线程去处理。第三种建立多个线程去处理客户端请求,每个线程独自监听客户端的请求。显然,第一种方案解决了简单服务器的并发问题。第二种方案其实是对第一种方案的改进,因为线程切换的开销明显要小于进程切换的开销。第三种方案就是原来用进程去处理每个请求,现在换成用线程去处理,个人认为改进不是很大。
$ u' U( N3 i: w: y7 [
3 I7 h  H# q1 {  R2. 高级并发服务器算法流程
/ S3 J: V6 x6 }, x
; X1 d8 k: |( c/ N2 x$ u
(1)统一accept,多进程% p0 c2 X" d) a" r8 U. _

: v, @  h+ C; H+ g! I" O& ]  socket(...);7 K; M4 u3 D$ X& n6 e7 Q4 j1 E

% b0 V9 _) ?& P  `& t  bind(...);5 a* A) B% w1 F. }
! R! W8 j6 `3 D4 N6 o) g
  listen(...);9 m; k+ J' _8 K* Q4 ]5 P( }
* O2 S4 M& O- f1 T  v% U* T
  while(1){" r/ [- f. A1 L. X& d
4 g+ ~( w) w+ |+ [6 L, ~  F. A& h
  accept(...);1 X! N" C3 |- |

- M* t* K- r6 E  D: a+ h  fork(...);//子进程% T3 V8 N- B/ a/ n; Z+ J
( x2 {+ f& W( D+ e. w" A1 g
}
+ `0 X1 E: Q: H9 P6 w3 b8 ?* r% v
% K) e# X; f, l- u% T6 e, R close(...);//关闭服务器套接字* c! h! T) u2 q$ H0 e0 v+ N

3 o7 k% D7 ~, s* A+ t& e子进程:7 [4 M. d9 L+ J% _# K

4 Q9 _& l& \# @1 N% c1 T3 V, g
游客,如果您要查看本帖隐藏内容请回复

% X, Q2 W8 K3 O7 M& v2 ~- x7 d( s7 {; H: p

0 a$ i" o  Y7 D) g

该用户从未签到

2#
发表于 2019-9-19 18:03 | 只看该作者
看看高级并发服务器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 02:00 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表