同步阻塞和异步阻塞

 假设现在办公室开会,就缺一个人了,在他没有来的时候,大家都在聊天。如果这个人不来,会议就没法召开,这就是阻塞。会议这个线程就被挂起了。这时,我们可以继续聊天这个线程,或者再开一个打牌的线程,但是我们不聊天、打牌,非要等到你来再开会,这是同步阻塞。如果我们边聊天、打牌,边等你来了再开会,这是异步阻塞。
  还是假设现在办公室开会,就缺你一个人了。如果你不来,会议照常可以进行,这就是非阻塞。尽管你不来,会议可以照常进行,这时我们也可以聊天打牌,但是我们没有聊天打牌,非要等你来才开会这就是同步非阻塞,如果你还没有来,我们就开会了,等你来了,再征求你的意见,这就是异步非阻塞,当然在开会的同时我们可能还在聊天或者打牌。
  基于这样的理解,如果是阻塞的话,当前阻塞的线程肯定会被挂起同步和异步只是针对其他线程而言的,如果其他线程一直再等该线程,那么就是同步阻塞,如果其他线程不等该线程继续或者开始执行,那么就是异步阻塞。
  如果是非阻塞的话,当前线程不会被挂起,只是某个函数调用没有返回,尽管其他线程或者本线程内其他函数可以不等这个函数返回继续执行,但是如果其他线程或本线程的其他函数非要等该函数返回,那么就是同步非阻塞。如果其他线程或者本线程的其他函数没有等该函数返回就继续执行,那么就是异步非阻塞。

猜你喜欢

转载自talentluke.iteye.com/blog/1700573