网上有好多讲这个的,但是非要说的那么学术,看了跟没看一样;
这里说一下我自己的理解,有不对的地方欢迎指正;
同步与异步
同步:A调用(请求)B时,立即需要B的返回结果;
异步:进程以不可预知的顺序向前执行,讲究异步性。A调用(请求)B时,通知B在完成时返回结果。一般实现方式都是多线程,就是每当有一块需要异步执行的代码就开一个线程去执行,但也有其他实现方式,想看其他方式可以去看看我的js执行机制;
阻塞与非阻塞
说阻塞和非阻塞之前,先了解一下操作系统中的 临界资源与共享资源;
临界资源:互斥资源不能被两个或多个进程同时访问,比如打印机;
共享资源:共享资源可以被两个或多个进程同时访问,比如内存;
临界资源和共享资源并不是一成不变的,通过一些方式临界资源是可以变成共享资源的,一般只是实现逻辑上的共享,列如增加缓冲区、访问队列等;
阻塞:就是线程在访问临界资源时,因为拿不到资源的阻塞状态,这时线程一般会被挂起,放入阻塞队列中;
非阻塞:线程访问共享资源;
互斥与同步
互斥:进程在访问临界资源时必须以互斥的方式访问,A正在访问,B就要等着;
同步:进程在访问共享资源时可以同时同步访问;
同步阻塞
A调用(请求)B时,A会等待B的完成,得到结果后再往后执行;
同步非阻塞
A调用(请求)B时,A 不会等待B,而是会以轮询的方式调用(请求)B ,期间A会做其他事,直到B返回结果;
异步非阻塞
A调用(请求)B时,A 只是通知B,在B完成时给A一个结果就好,期间A、B各干各的事;