同步与异步是IO操作与CPU指令协作方式的不同
同步sync
阻塞blocking:同一条线程独自完成IO操作和CPU指令操作,全程阻塞
非阻塞non-blocking:系统内核封装了检查IO的执行线程,等资源加载完后通知应用程序线程进行操作处理,虽然不用等待资源下载,但本质上还是阻塞,只是阻塞的位置变了。
ps:无论是阻塞还是非阻塞,io读写和cpu执行指令是耦合的,系统内核拷贝数据到程序进程的过程还是阻塞的,但这样做可以保证执行顺序!
异步async
解耦了IO操作和CPU执行指令,IO操作和CPU执行指令都暴露出去,让程序员控制, cpu不去参与IO的事情,IO处理完回调给应用程序便可,数据交互无需拷贝一份到程序进程,通过内存映射的方式避免了CPU的参与,但这样做执行顺序无法控制!