异步和非阻塞这两个概念经常被人们混淆,但它们有不同的含义。在计算机编程中,异步和非阻塞经常用来描述处理工作负载的方式。
异步(Asynchronous)是指事件可以独立于主线程和其他事件发生。也就是说,当一个操作在进行中时,可以同时进行别的操作,直到前一个操作完成并触发对应的回调函数,才能处理这个回调函数中的输出结果。异步操作可以通过回调函数、Promise 或 Async/await 来处理。
非阻塞(Non-blocking)是指一个进程或线程在等待另一个进程或线程的IO操作完成后不会阻塞并等待其结果返回,而是继续执行下一条指令,等到IO有结果后再通过回调函数或其他方式通知进程或线程,再处理返回的结果。
因此,异步和非阻塞的区别在于异步处理方式下处理函数在等待结果时会把 CPU 让给其他任务,不会阻塞进程或线程,而非阻塞处理方式下在等待结果返回时不会被进一步阻塞,进程或线程可以继续进行其他任务处理。