同步(CPU在线程中执行代码的速度非常快,但如果发生I ) o操作(如读写文件或发送网络数据),则需要等待I ) o操作完成,然后才能继续。 在IO期间,CPU传输到其他线程执行。
如果发生异步I(I ) o操作,CPU只需发送I ) o命令,然后继续执行其它代码而不等待结果。 稍后,IO返回结果时,会通知CPU处理。
异步IO模型需要消息吉鲁。 在消息吉鲁普中,主线程重复“读取消息-处理消息”的过程。
消息模型曾应用于桌面APP应用程序。 GUI程序的主线程不断负责读取和处理消息。 所有键盘、鼠标等消息都发送到GUI程序的消息队列,并由GUI程序的主线程进行处理。
GUI线程处理键盘和鼠标等消息的速度非常快,因此用户不会感到延迟。 有时,GUI线程在处理一个消息的过程中出现问题,导致一次处理消息的时间过长,这时用户会觉得整个GUI程序都没有响应,敲击键盘、单击鼠标都没有反应。 这表明,在消息模型中,必须非常快速地处理一条消息。 否则,主线程将无法立即处理消息队列中的其他消息,程序似乎停止响应。
消息模型如何解决同步IO必须等待IO操作的问题呢? 发生IO操作时,代码只负责发布IO请求,不等待IO结果,直接结束本轮消息处理,进入下一个消息处理流程。 I/o操作完成后,将显示“I/o完成”消息,您可以在处理过程中直接获取I/o操作的结果。
从提交IO请求到接收IO完成,同步IO模型中的主线程只会挂起,而异步IO模型中的主线程不会休息,而是继续在消息吉鲁中处理其他消息。 这样,异步IO模型就可以在一个线程上同时处理多个IO请求,而无需切换线程。 在大多数IO密集型APP应用中,异步IO大大提高了系统的多任务处理能力。
自: https://blog.csdn.net/sunxiaopengsun/article/details/59482051