溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

同步異步,阻塞非阻塞

發布時間:2020-08-10 15:25:02 來源:ITPUB博客 閱讀:168 作者:山有木xi 欄目:web開發

眾所周知JavaScript的執行環境是單線程的,當有多任務時,先執行前面的任務再按順序獅子那個后面一個,如果前面一個任務耗時很長,那么多所有任務都將拖延,比如經常遇到的瀏覽器無響應其實就是因為某一段JavaScript代碼長時間運行(死循環),導致其他任務無法執行,整個頁面無法繼續加載造成的,這就是阻塞

為了解決單線程阻塞問題,就出現一種異步編程,典型的異步編程就例如: Node.Js 

同步和異步實際上關注的是消息通信機制

  • 所謂同步,就是發出一個調用時,沒有得到結果就不返回

  • 所謂異步,就是發布一個調用后,立刻返回,被調用者通過狀態通知來告訴調用者,或者通過回調函數處理

阻塞與非阻塞實際上關注的是程序在等待調用結果時的狀態,可能是消息,可能是返回值

  • 所謂阻塞,就是指調用結果返回前,當前線程會被掛起,調用線程只有在得到結果之后才會返回

  • 所謂非阻塞,是指在不能立刻得到結果前,該調用不會阻塞當前線程

這時候,或許對同步異步,阻塞非阻塞有了一個概念,那如果,我們將它們互相組合起來呢?

  • 同步阻塞,老王用燒水壺燒開水,等水開了然后炒菜

  • 同步非阻塞,老王用燒水壺燒開水,然后去炒菜,隔一段時間看一下水燒開了沒

  • 異步阻塞,老王買了個燒開了水回響的燒水壺,然后等著水燒開了去炒菜

  • 異步非阻塞,老王用那個會響的燒水壺燒水,然后去炒菜,等水壺響了再去拿水壺

同步阻塞是最原始最笨的辦法,他要一直等著水燒開了。同步非阻塞其實是用到了輪詢、IO復用、協程等方法,每隔一段時間去看一下是不是燒開了。異步阻塞是個很“叛逆”的問題,一般很少用到,但是還是有這種情況的。異步非阻塞,那就是用到了回調函數和通知方式。

大膽推測,異步最終會變成某種形式或者狀態的同步,也就是消息或者回調,消息是進程間的通信,回調本身就是一種同步,只是采取了快響應,慢處理的策略,推后了同步的時間

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女