程序员成长之旅——同步IO和异步IO(五种IO模型)
在这里首先要知道一点就是IO操作其实总的就分为两种,第一种是等待的时间,第二种就是数据的拷贝,而往往等待的时间都是高于数据拷贝的,因此为了IO的更加高效,我们都是通过来缩短等待的时间来提生IO的效率的。其次在学习五种IO模型的前提下,先了解一下其概念。同步,异步,阻塞和非阻塞。
同步和异步
这两个概念与消息的通知机制有关。
同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。比如,调用readfrom系统调用时,必须等待IO操作完成后才能返回。它是一个可靠的任务序列。
异步
异步的概念和其同步的概念是与之对应的,当一个异步过程调用发出后,调用者不能立即得到结果。实际处理这个调用的部件在完成后,通过状态、通知、和回调来告诉调用者。实际处理的是否完成此任务,它是不得而知的,因此它是一个不可靠的任务序列。
消息通知
上面已知异步的概念和同步的概念是与之相对的。当一个同步的调用发出后,调用者要一直等待返回消息结果通知后,才能进行后续的执行;而当一个异步过程调用的时候,调用者不能立即得到返回消息。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者的。
这里提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。使用那一种通知机制,依赖于执行部件的实现,除非执行部件提供多种选择,否则是不受调用者控制的。
1.如果执行部件用状态来通知,那么调用者就需要每隔一定时间检查一次,效率就很低;
2.如果使用通知的方式,效率则很高,因为执行部件几乎不需要做额外的操作。至于回调函数和通知几乎一样。
场景比喻
举个例子,比如我去海底捞去吃饭,可能就有两种方式:
1.选择排队等候;
2.另外选择一个号码,等到我的号码的时候,广播通知我去就餐;
第一种:前者(排队等候)就相当于同步等待消息的通知,也就是我要一直等待前面客人用餐完。
第二种:后者(等待广播通知)就是异步等待消息通知。在异步消息处理中,等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在