做网站建设的怎么拓展业务,wordpress super cache,直播软件排行榜,临沂做网站推广的公司哪家好基本概念
I/O执行过程与分类#xff1a;
用户进程中的一个完整I/O分为 用户进程空间-内核空间-设备空间(磁盘、网卡) 这两个阶段。
I/O可以分为内存I/O、网络I/O、磁盘I/O
同步和异步是什么#xff1a;
1、对于线程的请求调用#xff0c;同步与异步…基本概念
I/O执行过程与分类
用户进程中的一个完整I/O分为 用户进程空间-内核空间-设备空间(磁盘、网卡) 这两个阶段。
I/O可以分为内存I/O、网络I/O、磁盘I/O
同步和异步是什么
1、对于线程的请求调用同步与异步区别在于是否要等这个请求出最终结果
比如read函数它就是只有读完了数据存入到了buf中才会执行下一步这就是同步
比如aio_read函数它就是只发送请求数据不论是否读完它都会执行下一步这就是异步。
2、对于多线程同步与异步区别在于是否要一致、是否要协调
比如生产者与消费者模型消费者需要等待生产者生产之后再消费需要一致这就是同步。
比如两个线程各干各的事这两个事情完全没有联系这就不需要一致这就是异步。
3、线程内现后两个函数的调用也是一种同步
现后两个函数的调用的意思是第一个函数执行结束第二个函数才执行。正常的程序都有这种同步
4、异步就是一个请求返回时一定不知道结果还需要通过其他机制获取结果。
其他机制主要有主动轮询、被动通知这两种。
阻塞与非阻塞是什么
阻塞、非阻塞与等待消息通知时线程的状态有关。阻塞的侧重点是等待时的状态同步的侧重点是数据通知机制。
进程生存周期的五个状态
新建、就绪、运行、阻塞、死亡
进程进入阻塞态的原因
1、调用sleep休眠
2、调用一个在I/O上被阻塞的操作
3、获取不到锁时
4、等待触发条件
socket中可能进入阻塞的操作
输入、输出、接收连接accept、外出连接connect
I/O模型
五种I/O模型
阻塞I/O、非阻塞I/O、多路复用I/O、信号驱动式I/O、异步I/O 阻塞I/O模型
以recvfrom函数为例。当进程调用recvfrom函数之后会进入内核空间在内核空间中去等待数据这时是死等直到数据到达并拷贝完成后才会返回应用进程此时应用进程解除阻塞。
注意阻塞I/O的阻塞点主要指的是等待数据到来时是阻塞的。 非阻塞I/O模型
以recvfrom函数为例。当进程调用recvfrom函数之后会进入内核空间当没有数据时并不会死等而是返回一个错误信息当有数据时会将数据拷贝完成之后返回应用进程拷贝为死等。
注意非阻塞I/O的非阻塞点主要指的是不去等待数据到来而拷贝数据时依旧有短暂阻塞。 多路复用I/O模型
以select-recvfrom为例多路复用I/O分为 等待多路数据 和 拷贝指定路的数据 两步。
等待多路数据当应用进程调用select函数后进入内核空间这时select根据所配置的参数可能为阻塞等待也可能是非阻塞等待数据。当多个通道中有数据存在时 会返回一个可读条件这个条件指定了哪一路的数据是存在的。
拷贝指定路的数据当recvfrom收到select返回的可读条件后就会去指定的通道拷贝数据。同样在拷贝数据的过程中有短暂阻塞。拷贝数据结束后返回应用进程。 信号驱动式I/O模型
以sigaction-recvfrom为例信号驱动式I/O可以分为 注册信号 和 拷贝数据 这两步。
注册信号当应用进程调用sigaction函数后进入内核空间将信号处理函数注册到内核中之后返回到应用空间中。此时进程继续正常执行直到信号产生内核会向进程发送信号处理的请求。
拷贝数据当应用进程接收到信号处理请求后会调用信号处理函数。假设信号处理函数中有一个recvfrom这是就会进入内核去拷贝数据短暂阻塞并拷贝完成后返回应用进程。
注意信号驱动式I/O是同步的这是因为在拷贝数据过程中是同步的。即真正发起I/O操作的过程是同步的。 异步I/O模型
以aio_read为例当应用进程调用aio_read后会向内核发送一个读请求之后就从内核返回到应用进程。这之后应用进程正常运行当有数据时会在内核中自动拷贝。拷贝结束后内核向应用进程发起信号应用进程直接使用拷贝好的数据。
注意异步I/O异步的点是真正的I/O操作过程是内核完成的于此同时应用进程并没有等待它完成而是异步的做另一件事情。