io模型

1.四种模型

同步阻塞,同步非阻塞,异步阻塞,异步非阻塞

2.同步异步之说

是线程之间调用的说法
调用者与被调用者,它们是线程之间的关系
两个线程要么是同步,要么是异步

同步操作:调用线程需要等待被调用线程返回结果,才会进行下一步
异步操作:调用线程不需要等待被调用线程返回结果,被调用线程一版依赖事件,回调等机制来通知调用者结果

3.阻塞非阻塞之说(一版说的都是IO)

阻塞与非阻塞,说的是线程内的关系
程序在等待调用结果(消息,返回值,IO返回数据)时的状态:
阻塞:调用结果返回前,当前线程被挂起,调用线程得到结果后才会返回
非阻塞:不能立刻得到结果之前,该调用不会阻塞当前线程。

什么是阻塞?
阻塞本质上是操作系统将线程状态变成阻塞,剥夺线程的CPU使用权,线程只有被唤醒(状态变为可执行)后,操作系统才会重新调度执行他

4.模型详细说明

同步阻塞IO:
发送方发送请求之后一直等待响应。
接收方处理请求时进行的IO操作如果不能马上等到返回结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。

同步非阻塞IO:
发送方发送请求之后,一直等待响应。
接受方处理请求时进行的IO操作如果不能马上的得到结果,就立即返回,取做其他事情。
但是由于没有得到请求处理结果,不响应发送方,发送方一直等待。
当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。(实际不应用)

异步阻塞IO:
发送方向接收方请求后,不等待响应,可以继续其他工作。
接收方处理请求时进行IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他操作。 (实际不应用)

异步非阻塞IO:
发送方向接收方请求后,不等待响应,可以继续其他工作。
接收方处理请求时进行IO操作如果不能马上得到结果,也不等待,而是马上返回去做其他事情。
当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。(效率最高)

原创:做时间的朋友
原文地址:https://www.cnblogs.com/PythonOrg/p/14919733.html