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