阮一峰關於js同步非同步的解釋
所謂"單執行緒",就是指一次只能完成一件任務。如果有多個任務,就必須排隊,前面一個任務完成,再執行後面一個任務,以此類推。
這種模式的好處是實現起來比較簡單,執行環境相對單純;壞處是隻要有一個任務耗時很長,後面的任務都必須排隊等著,會拖延整個程式的執行。常見的瀏覽器無響應(假死),往往就是因為某一段Javascript程式碼長時間執行(比如死迴圈),導致整個頁面卡在這個地方,其他任務無法執行。
為了解決這個問題,Javascript語言將任務的執行模式分成兩種:同步(Synchronous)和非同步(Asynchronous)。
"同步模式"就是上一段的模式,後一個任務等待前一個任務結束,然後再執行,程式的執行順序與任務的排列順序是一致的、同步的;"非同步模式"則完全不同,每一個任務有一個或多個回撥函式(callback),前一個任務結束後,不是執行後一個任務,而是執行回撥函式,後一個任務則是不等前一個任務結束就執行,所以程式的執行順序與任務的排列順序是不一致的、非同步的。
"非同步模式"非常重要。在瀏覽器端,耗時很長的操作都應該非同步執行,避免瀏覽器失去響應,最好的例子就是Ajax操作。在伺服器端,"非同步模式"甚至是唯一的模式,因為執行環境是單執行緒的,如果允許同步執行所有http請求,伺服器效能會急劇下降,很快就會失去響應。
相關文章
- 阮一峰:jQuery的deferred物件詳解jQuery物件
- 阮一峰快速排序排序
- 阮一峰:論文的版權屬於誰?
- 觀阮一峰老師js教程筆記JS筆記
- 如何給女朋友解釋什麼是IO中的阻塞、非阻塞、同步、非同步?非同步
- 關於同步的一點思考-下
- 關於forEach同步非同步的問題非同步
- 阮一峰部落格精選
- 對於同步、非同步、阻塞、非阻塞的幾點淺薄理解非同步
- 同步非同步,阻塞非阻塞非同步
- 非同步、同步、阻塞、非阻塞非同步
- 同步、非同步、阻塞、非阻塞非同步
- 基於 mysql 非同步驅動的非阻塞 Mybatis 瞭解一下MySql非同步MyBatis
- 同步、非同步、阻塞、非阻塞的區別非同步
- 同步非同步 與 阻塞非阻塞非同步
- 理解阻塞、非阻塞、同步、非同步非同步
- 同步、非同步,阻塞、非阻塞理解非同步
- 同步、非同步、阻塞與非阻塞非同步
- 同步、非同步、阻塞和非阻塞非同步
- 值得學習的技術人——阮一峰
- 阮一峰:Javascript的10個設計缺陷JavaScript
- 阮一峰:學習C語言的教材C語言
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 同步、非同步、阻塞、非阻塞的簡單理解非同步
- 同步與非同步、阻塞與非阻塞的理解非同步
- 關於序列同步的問題
- [轉]阻塞/非阻塞與同步/非同步非同步
- 同步與非同步 阻塞與非阻塞非同步
- 一篇文章讀懂阻塞,非阻塞,同步,非同步非同步
- 阮一峰每週分享第 2 期
- [翻譯]阮一峰webpack教程(Demo集合)Web
- 阮一峰:curl 網站開發指南網站
- 關於是否需要同步的一個問題?
- 關於js延遲載入(非同步操作)的方式JS非同步
- 關於跨語言呼叫與同步非同步等的疑惑非同步
- 同步阻塞、同步非阻塞、多路複用的介紹
- [轉]關於java中的 sychronized 同步方法 與 同步塊的理解JavaZed
- (翻譯)阮一峰老師的webpack使用教程Web