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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在上一节,我们介绍了Linux简单的并发服务器,通过在服务器端建立多个子进程,来接收客户端的请求,实现并发处理,但这种方式明显有缺陷,服务器并不知道客户端请求的数量,所以事先建立的进程数不好确定。所以,这里介绍三种高级并发服务器模式。第一种是服务器端统一accept,接收客户端的到来,然后为每个客户端分配一个进程去处理. 第二种是统一accept接收请求,然后为每个客户端分配一个线程去处理。第三种建立多个线程去处理客户端请求,每个线程独自监听客户端的请求。显然,第一种方案解决了简单服务器的并发问题。第二种方案其实是对第一种方案的改进,因为线程切换的开销明显要小于进程切换的开销。第三种方案就是原来用进程去处理每个请求,现在换成用线程去处理,个人认为改进不是很大。
1 b! l, E  }7 j2 O! @/ i
* K9 n$ N! q2 W& D$ f  y, ?2. 高级并发服务器算法流程
; j' b- `8 m$ F8 i! K5 s
+ C" ]$ K  o- \* N) d/ V2 j% }
(1)统一accept,多进程
# Y. y# j0 P6 D; ^" [) ?8 p. ~- T! F

, I4 K  A" A$ T) X! ?" L  socket(...);$ B/ L; K  x. i
( {% e# u! i9 Z% ~7 M
  bind(...);
+ [# u8 m; o5 v# x$ O8 `9 I5 `# O* G3 C1 t" L% J$ g
  listen(...);
% E1 i2 y! [1 i
3 Z- D* |: ]8 t  while(1){' e' r5 @0 O/ `" J7 V7 [3 z
1 ~! L; \- u" }) W
  accept(...);
# h9 U6 D6 [+ c) M# l+ n. G5 z4 m& I% f) u
  fork(...);//子进程, z/ |2 e% x( Z/ Y3 j8 I
* A# s& Z" p6 N9 a8 ^( }
}) ?2 M1 a' A3 V3 Y' x2 ^. U

$ T0 |( I, o# D: | close(...);//关闭服务器套接字
+ |$ n/ Y. R+ u8 I7 q/ [8 Q/ v% C8 t
子进程:- X4 `4 _* j/ e" [( X' n5 f1 y
: ~7 j% G" k4 t) g- Q$ R3 F
游客,如果您要查看本帖隐藏内容请回复

/ A' x; K, \/ G) J8 c2 E+ F% ^1 G
  E  b* i! P9 E) t' o! c$ }' J$ p

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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