引言:上篇文章讲到同步阻塞迭代式的进程方式,这篇文章讲述一下关于处理单进程阻塞于系统调用的情况。使用方式是多进程的方式,可以减少很大一部分的因为进程阻塞所带来的服务器无法响应问题。

基本思想是这样,如上篇文章所述,在单进程阻塞在read() 系统调用的时候,会导致服务器无法响应其他的连接请求,那么我们可以通过在服务器fork() 出很多子进程来处理业务,而主进程负责 accept() 其他的客户连接。

主体框架是这样:

for(;;){fd = accept(...);ret = fork() ;switch( ret ){case -1 :do_err_handler();break;case 0  :   // 子进程do_handler_fd( fd );break ;default :   // 父进程continue ; }
}

总体来说,符合上述所说的,主进程负责 accept() 连接,子进程处理连接。

当然,在do_handler_fd(fd) 中,可以关闭监听套接口等,只负责处理连接套接口。处理过程也是和上一章所说的一样。

read(fd,buf,n);dosomething(buf);write(fd,buf,n);

  

在父进程中需要设置信号处理函数,用来处理子进程退出时候产生的 SIG_CHLD型号,信号处理函数中调用 wait() 。避免产生僵尸进程、

我们来比较一下这个模型和前一个同步阻塞迭代式:

(1)并发量:这里的服务器主进程不再阻塞于read或者write()系统调用,而是通过子进程完成业务处理。阻塞也只是阻塞在子进程中。那么可以减轻服务器主进程的相应时间要求。并发量大大加强,但是会受到操作系统的限制。

(2)代码复杂度:越到后面的代码复杂度肯定越高,开发难度也会慢慢加强。

(3)稳定性:服务器的稳定性现在两个版本还没有体现出来。不过如果没有处理好进程之间的协作和并发控制等第二个版本还是会比第一个版本稍微显得不稳定。

多进程还有另一种方式Pre-fork方式,也就是进程池方式,这里没有做过多的介绍,以后会加上这部分内容。

总结:说一下多进程并发式的服务器端模型的好处就是,主进程不用阻塞在IO系统调用中,而专注于负责处理连接请求。但是,进程本身的开销是很大的,频繁的创建进程会消耗很多务器端的资源。所以,还有其他的处理方式,那就是线程模型。既然创建多进程消耗系统资源,我们可以采取采用线程的方式来达到目的。这就是下一篇文章要谈论的:多线程方式(会有一个线程池的实例)

[原]浅谈几种服务器端模型——多进程并发式相关推荐

  1. [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) - _Boz - 博客园

    [原]浅谈几种服务器端模型--反应堆模式(epoll 简介) - _Boz - 博客园 [原]浅谈几种服务器端模型--反应堆模式(epoll 简介) 引言:上一篇说到了线程池方式来处理服务器端的并发, ...

  2. [原]浅谈几种服务器端模型——反应堆的设计

    引言:持续更新了一段时间的博客,今天把最后一点部分加上,一个简单的反应堆的实现,基于epoll,工作过程上一篇博文已经有所介绍. 需要再次提到的就是关于反应堆的使用方式: 注册事件(为需要监听的fd加 ...

  3. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  4. 浅谈几种区块链网络攻击以及防御方案之日蚀攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/12/network_attack_of_blockchain_eclipse_attack/ 写在前面的话 自 ...

  5. 浅谈深度学习:如何计算模型以及中间变量的显存占用大小

    原文链接:https://oldpan.me/archives/how-to-calculate-gpu-memory 前言 亲,显存炸了,你的显卡快冒烟了! torch.FatalError: cu ...

  6. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

  7. 浅谈几种区块链网络攻击以及防御方案之女巫攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...

  8. 浅谈几种区块链网络攻击以及防御方案之51#37攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/11/network_attack_of_blockchain_51_attack/ 写在前面的话 自比特币诞生 ...

  9. 浅谈5种网络IO模型

    五种 IO 模型 1.阻塞式 IO 阻塞 IO 是最流行的 IO 模型 在网络 IO 的时候,进程发起 recvfrom 系统调用,然后进程就被阻塞了,什么也不干,直到数据准备好,并且将数据从内核复制 ...

最新文章

  1. 仔细选择会话状态提供程序
  2. JDBC常见面试题集锦(一)
  3. 最近的日子,很惬意!
  4. php 循环大数组 卡死,PHP 大数组循环问题_PHP教程
  5. php利用mkdir()创建多级目录
  6. 有一个php的类库网站_可以composer下载的,composer轻量级的HTTP开发库
  7. 每天进步一点点《PCA的简要学习》
  8. JDK源码(21)-Unsafe
  9. .net Thrift 之旅 (二) TServer
  10. matlab方阵对角线清零
  11. windows清除记住的密码
  12. 最短路+状压DP【洛谷P3489】 [POI2009]WIE-Hexer
  13. idea每次都要配置tomcat_午饭收藏夹里的c位石锅拌饭,每次来到都要等位......
  14. HDU2544:最短路(Dijkstra)
  15. cpuz测试分数天梯图_cpubenchmark(2020电脑cpu性能天梯图)
  16. cookie模拟登陆淘宝
  17. 数字签名原理及其应用
  18. 运行ug软件需要什么样的配置?
  19. 病毒常用方法之隐身术
  20. Windows 镂空图标,“百变硬汉”

热门文章

  1. oracle的解析計劃,Oracle中获取执行计划的几种方法分析
  2. mysql 超时连接错误码_mysql链接超时错误
  3. ue4蓝图运行顺序_学习UE4,先学蓝图还是c++_资源库
  4. mysql fsync_MySQL - InnoDB特性 - Buffer Pool漫谈
  5. 现在电脑的主流配置_主流级玩家 应该如何配置高性价比电脑
  6. R语言的特征选择(Feature Selection)包:Boruta和caret
  7. mysql的储存原理_mysql储存原理
  8. jenkins java jar_Jenkins 安装和配置、启动jar包
  9. 全景视频拼接(一)--关键技术流程
  10. 前景检测算法(五)--GMM,GMM2,GMG