天天看點

同步、異步、阻塞、非阻塞之間的差別

  1. 阻塞是線程的一個狀态,線程發起任務請求然後一直等,直到到任務完成再把結果傳回,如果任務未完成目前線程會被挂起。
  2. 非阻塞是發起任務請求之後先馬上傳回去做别的事,然後再時不時主動檢視任務請求是否被完成。(輪詢)
  3. 同步是指兩個任務(線程)之間存在競争或者因果關系,例如一個線程占用了一個對象,其他線程如果要通路此對象,則需要等之前的線程操作完成傳回,相關概念有同步方法、同步代碼塊、對象鎖;同步可能是阻塞的也可能是非阻塞的,當被競争的對象已被其他線程占用,目前線程如果表現為挂起等待,則是阻塞調用;若目前線程通過輪詢(樂觀鎖)不斷檢視競争對象是否已經釋放,則是非阻塞調用。
  4. 異步是如果完成任務時,遇到一個耗時操作(或者對象已經被别的線程占用了),不等待而是去做其他事情,也不主動檢視是否完成,而是等耗時操作完成,發通知再叫線程回來處理結果,常見的例子就是 Ajax ,相關概念有回調函數等。

繼續閱讀