12种常见的并发网络服务程序设计方案

本文介绍了12种并发网络服务程序设计方案,从传统的fork-per-client到现代的IO复用和线程池方案。讨论了各种方案的优缺点,如线程/进程创建的开销、并发连接数的限制、CPU密集型应用的处理以及多核利用率。重点分析了Reactor模式、单线程和多线程 reactor 方案,强调了在实际应用中根据场景选择合适设计的重要性。
摘要由CSDN通过智能技术生成

文中多个片段摘自陈硕老师的《Linux多线程服务端编程-使用muduo C++网络库》,特整理于此,备学习、工作使用。

             12种常见的并发网络服务程序设计方案

方案 0:

         这其实不是并发服务器,而是 iterative 服务器,因为它一次只能服务一个客户。代码见 UNP figure 1.9,UNP 以此为对比其他方案的基准点。

这个方案不适合长连接,到是很适合 daytime 这种 write-only 短连接服务。

方案 1:

         这是传统的 Unix 并发网络编程方案,UNP 称之为 child-per-client 或 fork()-per-client,另外也俗称 process-per-connection。这种方案适合

并发连接数不大的情况。至今仍有一些网络服务程序用这种方式实现,比如 PostgreSQL 和 Perforce 的服务端。这种方案适合“计算响应的工作量

远大于 fork() 的开销”这种情况,比如数据库服务器。这种方案适合长连接,但不太适合短连接,因为 fork() 开销大于求解计算响应的用时。

方案 2 :

        这是传统的 Java 网络编程方案 thread-per-connection,在 Java 1.4 引入 NIO之前,Java 网络服务程序多采用这种方案。它的初始化开销比方案 1

要小很多。这种方案的伸缩性受到线程数的限制,一两百个还行,几千个的话对操作系统的scheduler 恐怕是个不小的负担。

方案 3:

         这是针对方案 1 的优化,UNP 详细分析了几种变化,包括对 accept 惊群问题(多个进程阻塞在accept)的考虑。

方案 4:

         这是对方案 2 的优化,UNP 详细分析了它的几种变化。3 和 4 这两个方案都是 Apache httpd 长期使用的方案。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值