同步非同步,阻塞非阻塞
眾所周知JavaScript的執行環境是單執行緒的,當有多工時,先執行前面的任務再按順序獅子那個後面一個,如果前面一個任務耗時很長,那麼多所有任務都將拖延,比如經常遇到的瀏覽器無響應其實就是因為某一段JavaScript程式碼長時間執行(死迴圈),導致其他任務無法執行,整個頁面無法繼續載入造成的,這就是阻塞
為了解決單執行緒阻塞問題,就出現一種非同步程式設計,典型的非同步程式設計就例如: Node.Js
同步和非同步實際上關注的是訊息通訊機制
-
所謂同步,就是發出一個呼叫時,沒有得到結果就不返回
-
所謂非同步,就是釋出一個呼叫後,立刻返回,被呼叫者透過狀態通知來告訴呼叫者,或者透過回撥函式處理
阻塞與非阻塞實際上關注的是程式在等待呼叫結果時的狀態,可能是訊息,可能是返回值
-
所謂阻塞,就是指呼叫結果返回前,當前執行緒會被掛起,呼叫執行緒只有在得到結果之後才會返回
-
所謂非阻塞,是指在不能立刻得到結果前,該呼叫不會阻塞當前執行緒
這時候,或許對同步非同步,阻塞非阻塞有了一個概念,那如果,我們將它們互相組合起來呢?
-
同步阻塞,老王用燒水壺燒開水,等水開了然後炒菜
-
同步非阻塞,老王用燒水壺燒開水,然後去炒菜,隔一段時間看一下水燒開了沒
-
非同步阻塞,老王買了個燒開了水迴響的燒水壺,然後等著水燒開了去炒菜
-
非同步非阻塞,老王用那個會響的燒水壺燒水,然後去炒菜,等水壺響了再去拿水壺
同步阻塞是最原始最笨的辦法,他要一直等著水燒開了。同步非阻塞其實是用到了輪詢、IO複用、協程等方法,每隔一段時間去看一下是不是燒開了。非同步阻塞是個很“叛逆”的問題,一般很少用到,但是還是有這種情況的。非同步非阻塞,那就是用到了回撥函式和通知方式。
大膽推測,非同步最終會變成某種形式或者狀態的同步,也就是訊息或者回撥,訊息是程式間的通訊,回撥本身就是一種同步,只是採取了快響應,慢處理的策略,推後了同步的時間
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2681684/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- 同步、非同步、阻塞、非阻塞的區別非同步
- 徹底搞懂同步非同步與阻塞非阻塞非同步
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- java同步非阻塞IOJava
- 非同步和非阻塞非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- 大白話搞懂什麼是同步/非同步/阻塞/非阻塞非同步
- socket阻塞與非阻塞,同步與非同步、I/O模型非同步模型
- 網路IO之阻塞、非阻塞、同步、非同步總結非同步
- 怎樣理解阻塞非阻塞與同步非同步的區別?非同步
- 一篇文章讀懂阻塞,非阻塞,同步,非同步非同步
- ♻️同步和非同步;並行和併發;阻塞和非阻塞非同步並行
- [譯] 非同步程式設計:阻塞與非阻塞非同步程式設計
- 程式執行緒、同步非同步、阻塞非阻塞、併發並行執行緒非同步並行
- 聊聊執行緒與程式 & 阻塞與非阻塞 & 同步與非同步執行緒非同步
- 對於同步、非同步、阻塞、非阻塞的幾點淺薄理解非同步
- 併發-0-同步/非同步/阻塞/非阻塞/程式/執行緒非同步執行緒
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- Socket程式設計中的同步、非同步、阻塞和非阻塞(轉)程式設計非同步
- 【OS】同步非同步/阻塞非阻塞、併發並行序列的區分非同步並行
- 對執行緒、協程和同步非同步、阻塞非阻塞的理解執行緒非同步
- 【死磕NIO】— 阻塞、非阻塞、同步、非同步,傻傻分不清楚非同步
- Java 非阻塞 IO 和非同步 IOJava非同步
- 真正的 Tornado 非同步非阻塞非同步
- tornado非同步請求非阻塞非同步
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- 談談對不同I/O模型的理解 (阻塞/非阻塞IO,同步/非同步IO)模型非同步