这个主要是记录下自己长期以来的一个误区,认为异步的本质就是多线程。
这个误解主要是来源于对异步执行的理解,认为异步执行就是当主线程执行到一个耗时操作时,为了不阻塞主线程,我们另起一个线程去执行这个耗时任务,当这个任务执行完成后,子线程会通知主线程。
尽管很多文章中都写道:异步是目的,多线程是实现异步的一种方式。但是由于这些文章没有深入,反而让我更糊涂了,认为异步执行是一定要多线程支持才行的,毕竟不阻塞主线程,但是那个任务总得有个线程去执行吧。
只要一句话就可以讲清楚:
计算机中的I/O操作是不需要CPU全程参与的,因此也就不需要线程。
也就是说,只要这个任务不是需要CPU参与的任务,那么就不需要启动一个线程去处理,因为我们知道线程是进行CPU调度的最小单位。CPU发起IO操作命令,硬件就会自行和内存交换数据,并不影响CPU执行后面的操作,等到数据交换完成后硬件触发中断告知CPU IO操作已完成,这样就完成了异步调用。