Linux IO模式及 select、poll、epoll详解

2018-09-26  本文已影响0人  m风满楼

问题的由来:

C10K问题的最大特点就是:设计不够良好的程序,其性能和链接数以及机器性能的关系是非线性的.

例子:没有考虑过C10k问题,一个经典的基于select的程序能在就服务器上很耗处理1000并发的吞吐量,但是在2倍性能新服务器上往往处理不了并发2000的吞吐量.

因为:大量操作的消耗和当前链接数n成线性相关.


基本策略:

主要有两个方面的策略:

  1. 应用软件以何种方式和操作系统合作,获取IO事件并调度多个socket上的IO操作;
  2. 应用软件以何种方式处理任务和线程/进程的关系.

前者主要有阻塞IO,费阻塞IO,异步IO三种方式

后者主要有每任务1进程,每任务1线程,单线程,多任务共享线程池以及一些更复杂的变种方案.

1,serve one client with each thread/process, and use blocking IO.,

2,serve many clients with single thread, and use nonblocking IO and readiness notification.

3,serve many clients with each thread, and use nonblocking IO and readliness notification

4,serve many clienets witch each thread, and use asynchronous IO.

基本概念

用户空间与内核空间
进程切换
进程的阻塞
缓存 I/O

IO模式

对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:

  1. 等待数据准备 (Waiting for the data to be ready)
  2. 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)

正式因为这两个阶段,linux系统产生了下面五种网络模式的方案。

io模式详见该文章

Linux的五种I/O模式

参考链接:
IO多路复用之epoll总结
select,epool,pool解释
Linux IO模式及 select、poll、epoll详解
高性能IO模型浅析
Reactor模式详解

上一篇 下一篇

猜你喜欢

热点阅读