【面試】詳解同步/異步/阻塞/非阻塞/IO含義與案例

本文詳解同步、異步、阻塞、非阻塞,以及IO與這四者的關聯,畢竟我當初剛認識這幾個名詞的時候也是一臉懵。


csdn csdn csdn csdn csdn



🔥1.同步阻塞、同步非阻塞、異步阻塞、異步非阻塞

1.同步
  • 同步就是多個事物不能同時工作,只能依次排隊進行
2.異步
  • 多個事物可以同時工作,不用依次進行
3.阻塞
  • 線程需要停止等待
4.非阻塞
  • 線程可以運行工作
5.四者關聯

同步/異步,關注的是能不能同時工作

阻塞/非阻塞,關注的是能不能動

  • 同步阻塞:不能同時工作,也不能動。比如只有一條小道,一次只能過一輛車,可悲的是都堵上了。
  • 同步非阻塞,不能同時開工,但可以動。比如只有一條小道,一次只能過一輛車,幸運的是可以正常通行。
  • 異步阻塞,可以同時開工,但不可以動。有多條路,每條路都可以跑車,可氣的是全都堵上了。
  • 異步非阻塞,可以工時開工,也可以動。有多條路,每條路都可以跑車,很爽的是全都可以正常通行。

回到程序中對應線程就是

  • 同步阻塞,相當於一個線程在等待。
  • 同步非阻塞,相當於一個線程在正常運行。
  • 異步阻塞,相當於多個線程都在等待。
  • 異步非阻塞,相當於多個線程都在正常運行。


🔥2.IO與上述四者的關聯

1.IO、阻塞IO、非阻塞IO
  • IO: 指的就是讀入/寫出數據的過程,和等待讀入/寫出數據的過程。一旦拿到數據後就變成了數據操作了,就不是IO了
    • 阻塞IO:用戶線程被阻塞在等待數據上或拷貝數據上
    • 非阻塞IO:用戶線程沒有因爲IO的事情出現阻塞

2.同步IO、同步阻塞IO

在IO中,同步與非阻塞是互斥的,即不存在同步非阻塞IO,而同步非阻塞即存在的,但那不叫IO,叫操作數據

  • 同步IO:必須拿到IO的數據,纔可以繼續執行。對應代碼中讀取文件然後操作

  • 非阻塞IO:發起IO請求後,代碼就可以往下執行。即一定不是同步。

所以,同步IO一定是阻塞IO,同步IO等於同步阻塞IO。且不存在同步非阻塞IO


3.異步IO、異步阻塞IO、異步非阻塞IO
  • 異步IO:異步IO是指發起IO請求後,不用拿到IO的數據就可以繼續執行
    • 異步阻塞IO:發起IO請求後,在拷貝數據這個過程中,線程發生了阻塞。
    • 異步非阻塞IO:發起IO請求後,收到通知,數據處理好了,且這個過程沒發生阻塞。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章