不喜欢很多专业文章中用一堆术语去描述另一个术语,越简单的事物越美好。
谈到IO模型,常见的IO模型大概有5种。
1.阻塞IO
2.非阻塞IO
3.多路复用IO
4.信号驱动IO
5.异步IO
1)阻塞IO
所谓阻塞,是指当前线程被挂起了。也就是说,在执行这个IO操作的时候,在操作返回结果前,当前线程交出了cpu的控制权(这个控制权应该是交给了操作系统内核,内核执行完后,会把cpu还给该线程)。
2)非阻塞IO
非阻塞,表明当前线程没有被挂起,这种方式只是告诉操作系统内核去执行一个IO操作,然后当前线程该干嘛干嘛。当需要知道IO操作的结果的时候,可以去“问”内核之前让你办的事办的怎么样了。
3)多路复用IO
多路复用其实是非阻塞IO模型的扩展。这么讲吧,领导安排了10个任务给下面基层员工,然后让秘书去盯着这10个员工的任务的执行情况(这里秘书是同步的,不干别的事了,就专门等结果咯),谁有结果了就汇报给领导,这样领导就实现了一个人能够管理好10个任务了,其实是把秘书复用了。
4)信号驱动IO
如果说多路复用IO是领导在得到秘书的反馈后主动去执行某些操作的话,那么信号驱动IO就是领导收到IO操作完成的信号后去做应该做的事。
5)异步IO
字面意思就是在执行IO操作的 时候,线程没有阻塞。这里跟非阻塞的概念非常像。区别在于异步IO机制会有相应的信号、状态、回调之类的反馈机制,而非阻塞仅仅是当前操作没有阻塞线程罢了。
IO是编程的基础啊,必须得要理解,后面会继续维护这些博客,增加相应代码来解释。