IO模型
来源:互联网 发布:mymps seo伪静态 编辑:程序博客网 时间:2024/04/30 04:58
在学习nginx的时候咱们知道,它处理请求的方式是异步非阻塞的,这就是一种IO模型,这里简单介绍四种基本的IO模型。
IO模型:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞。
同步和异步:相对于用户线程和内核,同步是用户线程发起IO调用,内核处理,等内核处理完后用户线程才继续执行。异步:用户线程发起请求了,继续执行,内核调用后通知用户线程。
阻塞和非阻塞:阻塞是IO操作彻底完成后才返回用户空间,非阻塞:IO操作被调用后立即返回用户一个状态,不用等到IO操作彻底完成。
1.同步阻塞
用户发起read请求,然后由用户空间转到内核空间,等到数据到达后,将数据包拷贝到用户空间,完成read操作。整个IO请求过程中用户线程是被阻塞的,导致用户在发出IO请求后不能做任何事情,造成了cpu空缺,利用率不高。
2.同步非阻塞
用户线程发起IO请求后立即返回一个状态,但是并没有数据,接下来用户线程不断的发出IO请求,直到数据到达后,才将数据拷贝到用户空间内。虽然每次发起IO请求可以立即返回,但为了等到数据需要轮询的发出,消耗大量的cpu资源。
3.异步阻塞
将需要进行IO操作的socket添加到select中,阻塞等待select系统调用返回,当数据到达时,socket被激活,用户线程发起IO请求,读取数据并继续执行。
使用select的优势:可以在一个线程中同时处理多个socked的IO请求,在同步阻塞中以多线程的方式才能实现。
4.异步非阻塞
在异步阻塞中用户线程自行读取、处理数据。在异步非阻塞中,当用户线程收到通知时,内核已经处理好了数据,并放到用户线程指定的缓冲区中,内核在IO完成后通知用户线程直接使用。
对这四种IO模型的简单介绍希望对大家有帮助,有个整体上的认识。
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO模型
- IO 模型
- IO模型
- Housewife Wind - POJ 2763 树链刨分
- node Express 创建一个web应用
- 卡尔曼滤波
- iOS部分-UI基础控件 - 01天 入门 第01课 计算机的界面搭建
- 【重庆淘宝代运营】淘宝类目不容小看 文章大了去
- IO模型
- 剑指offer 算法(链表 树)
- hdu 5392 许多数的lcm的取模
- HashSet 集合性质实验
- Rotate Image
- ubuntu下sed命令详解
- java基础
- HDU 1429 BFS + 状压
- android中的线程执行UI更新方式,以及Handler的初步了解