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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

7 [' l5 M5 S# Y4 G0 y2. 高级并发服务器算法流程) Y5 s* n" j0 ]

5 I) R0 N2 A+ d' N- L- L9 X(1)统一accept,多进程3 ?# Z3 ]) U+ \# m7 R

: `5 R; t' P) x: o( Q5 E8 p  socket(...);
6 D& a6 S& b, f8 U* V& Y$ z2 a5 P, ^8 l( C) n5 v+ N
  bind(...);
8 V2 p# h& U# I/ E- u7 r
  \- t3 D7 i% f5 I+ j  listen(...);/ o" {8 ]8 h+ w* Z# ~5 T
' |/ h& Q( `, c2 I; w  j
  while(1){
8 k2 |4 H% F. |) k9 N% }8 A$ i/ o* }4 w2 @9 q; Z! V9 B
  accept(...);$ U2 N3 C7 `7 B( h1 C
7 w! I2 X2 q, Q- n0 X( g, E6 q! w
  fork(...);//子进程
+ w" H" J5 \* P* y& u5 C3 R" k7 b) a$ a: @/ A. \, i1 u/ b5 L! `
}
( x; F1 F# M' T; w+ C; |' R
* L- L# w( k; U% X  q; m) y  L4 G close(...);//关闭服务器套接字2 @" p0 B! b4 ~3 p# t

* ^6 i8 H. K3 z( s3 d, w子进程:. h9 v) h+ j- M# I- t. o
$ L' Z. k. p$ I( ^
游客,如果您要查看本帖隐藏内容请回复
, i0 l8 Q& }8 }. J/ K& L! ?" S7 _3 S
6 ?) n+ i5 }: y, x/ w' s& {

. \: {' H6 j3 N

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 01:20 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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