先虚拟一个硬件IO的例子做比喻:
1 同步IO:有这么一个硬件设备,该设备可以用来存储数据,但是设备本身不具备自己的CPU,所有的数据读写操作都只能靠计算机的主CPU来完成,这样的读写相对与主CPU来说就是同步IO。
2 异步IO:有这么一个设备,该设备可以用来存储数据,和1中不同的是,该设备具备自己的CPU,具有一定的自主性,当设备的数据可读时可以向主CPU发送事件通知来完成读,当主CPU将一块数据提交给该设备的缓冲区后,该设备的CPU可以自行完成数据的写操作,这种读写相对与主CPU来说就是异步IO。
在我们的软件设计层面上,拿读写socket来举例:
所谓的同步IO就是对socket的读写完全由业务线程池中的线程来完成,相当于上面例子的完全由主CPU来完成socket读写。
所谓的异步IO:我们还要设计一个单独的做IO的线程池专门负责对socket的读写,读socket时:当socket有数据可读,IO线程池要通知给业务线程池来读数据;写socket时:业务线程将业务数据准备好放到和该socket关联的发送缓冲区中,然后由IO线程池来做socket的实际写。这个IO线程池可以同时做多个socket的读写。相当于上面例子中的设备CPU完成读写操作,将主CPU从读写中释放出来,这就是异步IO。
我们再来扩展下,扩展到非IO操作的长时间耗时操作:
同步操作就是在业务线程中做耗时操作。
异步操作就是将耗时操作提交给单独的专门做耗时操作的线程池来完成,当耗时操作完成时,通过消息事件的形式通知给业务线程。
扫描二维码关注公众号,回复:
9278206 查看本文章
同步操作的缺点:降低了业务线程池的业务处理吞吐量
异步操作的优点:业务线程池完全不阻塞,业务处理吞吐量高
(完)