多线程与并发服务器设计

1.循环式/迭代式(iterator)服务器

  • 无法充分利用多核CPU,不适合执行时间较长的服务
    在这里插入图片描述

2.并发式服务器

  • one connection per process/one connection per thread
  • 适合执行时间比较长的业务
    在这里插入图片描述

3.prefork or pre thread

  • 惊群现象
    在这里插入图片描述

4.反应式(reactive)服务器(reactor模式)

  • 并发处理多个请求,实际上是在一个线程中完成。无法充分利用多核CPU
  • 不适合执行时间比较长的服务,所以为了让客户感觉是在“并发”处理而不是“循环”处理,每个请求必须在相对较短时间内执行
    在这里插入图片描述

5.reactor + thread per request

6.reactor + worker thread

7.reactor + threadpool(能适应密集计算)

在这里插入图片描述

8.multiple reactors(能适应更大的突发IO)

  • reactors in threads(one loop per thread)
  • reactors in processes
    在这里插入图片描述

9.multiple reactors + thread pool

  • one loop per thread + threadpool,适应突发IO与密集计算
    在这里插入图片描述

10.proactor服务器(proactor模式,基于异步IO)

  • 理论上proactor比reactor效率更高一些
  • 异步IO能够让IO操作与计算重叠,充分利用DMA特性
  • Linux异步IO
glibc aio(aio *); //有bug
kernel native aio(io *); //也不完美,目前仅支持O_DIRECT方式来对磁盘读写,跳过系统缓存。要自己实现缓存,难度不小
  • boost asio实现的proactor,实际上不是真正意义上的异步IO,底层是用epoll来实现的,模拟异步IO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值