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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在上一节,我们介绍了Linux简单的并发服务器,通过在服务器端建立多个子进程,来接收客户端的请求,实现并发处理,但这种方式明显有缺陷,服务器并不知道客户端请求的数量,所以事先建立的进程数不好确定。所以,这里介绍三种高级并发服务器模式。第一种是服务器端统一accept,接收客户端的到来,然后为每个客户端分配一个进程去处理. 第二种是统一accept接收请求,然后为每个客户端分配一个线程去处理。第三种建立多个线程去处理客户端请求,每个线程独自监听客户端的请求。显然,第一种方案解决了简单服务器的并发问题。第二种方案其实是对第一种方案的改进,因为线程切换的开销明显要小于进程切换的开销。第三种方案就是原来用进程去处理每个请求,现在换成用线程去处理,个人认为改进不是很大。4 s9 }& c4 ]8 c& ^

/ u6 t, J' C5 i) g/ ]: b- A. i2. 高级并发服务器算法流程6 I! V; N4 E8 `2 U/ c
4 d" y" |0 g& t
(1)统一accept,多进程
' R( f& S; O8 Y7 K. \: q3 o
! w3 N4 V6 E/ R
  socket(...);
3 y9 l! I, G5 Q9 k3 U% {
, A" L; y) M& N2 f8 Q' f, b$ O  bind(...);4 l4 v/ D% s% B* `

* g- |# I6 m& ^3 l2 [  listen(...);* H$ {9 j5 g' L  I0 ^
7 S. e: w5 Z0 C7 M' w( _
  while(1){6 _/ Q) K2 s' h& u! f' {2 W
( ?3 A$ b: Q6 k1 m+ l
  accept(...);
. W$ o) S0 b7 n) ^7 \( ?2 K
: Y( D# J$ A+ c! b: p  fork(...);//子进程
9 U$ Q( }$ i. V4 s# i8 U" T: W1 h4 I! v: N& t( u) R, A
}0 f; i1 j% F7 y6 [7 j5 s$ x
2 e& z  D: k6 z. M
close(...);//关闭服务器套接字1 _& w' f6 K+ [$ a" P, V
# a, t$ s7 M3 `* [" C1 }
子进程:
% P+ u( r' H, F4 o
! E7 t2 f. F, L: x/ A
游客,如果您要查看本帖隐藏内容请回复
/ v1 W; m3 r  G) {; T  _  i

: ], \& x4 k' ^) w2 b7 t  S) N6 f* I" ], F

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-23 20:35 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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