同步和异步,堵塞和非堵塞
1、同步与异步
同步与异步是对应于调用者与被调用者,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。
同步,调用者需要等待被调用者返回结果,才会进行下一步操作
异步,调用者不需要等待被调用者返回调用,即可进行下一步操作
2、堵塞和非堵塞
阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞,是一个状态。
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程
3、举例
假设有两个线程一个是a1、a2、a3...另一个是b1、b2、b3、b4...他们都是依次进行处理
第一个线程的a1去调用第二个线程的b1,如果b1处理结果返回后,线程a1才会继续处理a2、a3,那这个这两个线程之间就是同步,b走一步a走一步。
如果第一个线程的a1去调用第二个线程的b1,如果不等b1处理完,线程a1就继续处理a2,此时这两个进程之间就是异步,b走一步a走好几步。
在第二个线程内部处理b1这个调用的时候,b1这个调用结果返回之前,当前进程被挂起,此时第二个进程就是堵塞状态。
在第二个线程内部处理b1的这个调用的时候,b1没有完成,未被挂起,未堵塞当前进程,可以继续去处理b2,b3,此时第二个队列这就是非堵塞状态。
4、四种关系
第一个线程的a1,调用第二个线程的b1,b1处理这个请求一直没完成,第二个线程被挂起,第二个进程无法继续处理请求b2,b3,此时线程二处于堵塞状态。线程一也一直再在a1处未往下进行,a2,a3一直在等待。直到b1返回结果,队列一继续处理a2、a3,这个调用过程处于同步,这就是同步堵塞
第一个线程的a1,调用第二线程的b1,b1处理这个请求一直没完成,但第二个线程未被挂起,会继续处理b2,b3,此时第二个线程处于非堵塞状态。线程一也一直再在a1处未往下进行,a2,a3一直在等待。直到b1返回结果a2,a3才继续进行,这个调用过程处于同步,这就是同步非堵塞。
第一个线程的a1,调用第二个线程b1,b1处理这个请求一直没完成,第二个线程被挂起,第二个进程无法继续处理请求b2,b3,此时线程二处于堵塞状态,而线程一在b1调用未返回之前,继续处理a2,a3,等到b1处理完返回结果,队列一已经在处理a2,这个调用过程处于异步,这就是异步堵塞。
第一个线程的a1,调用第二个线程b1,b1处理这个请求一直没完成,但第二个线程未被挂起,会继续处理b2,b3,此时第二个线程处于非堵塞状态。而线程一在b1调用未返回之前,继续处理a2、a3,等到b1处理完返回结果,队列一已经在处理a2,这个调用过程处于异步这就是异步非堵塞。
18:39