當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript单线程
生活随笔
收集整理的這篇文章主要介紹了
JavaScript单线程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?? ?JavaScript的單線程源于其需要與用戶進行交互,通過響應用戶的操作作出相應的反應。如果非單線程,那么當用戶執行兩個相互矛盾的操作時,都需要得到響應,那么究竟是哪一個先哪一個后呢?因此,為了避免這種矛盾,JavaScript總是單線程執行。
??? JavaScript任務分為兩種:同步任務、異步任務。同步任務位于主線程上,形成一個執行棧,后一個任務的執行需要依賴于前一個任務的執行結束;而以不變任務位于任務隊列中,暫時不進入主線程,其需要等待主線程上的任務執行完,且自己需要的資源得到,再利用回調函數執行該任務。即主線程上的任務執行結束之后才會調用任務隊列中的任務。其中定時器(setTimeout()和setInterval())也放置在任務隊列中,指定相應的回調函數在多少時間之后執行。
eg.
setTimeout(function(){console.log(1);}, 0); console.log(2);先執行主線程上的任務,即console.log(2);其執行完畢才會執行任務隊列中的任務,即第一句的定時器函數。因此會輸出2,1。
ps:當定時器指定的時間到了之后,若前面任務還沒有執行完,則繼續執行前面的任務,等待任務執行完畢之后立即調用定時器函數。若前面任務已經執行完畢,但定時器的時間還沒到,則等待時間到了再執行定時器函數,這個空閑時間段可以先去執行別的任務。
?
?
學習&感謝:
http://www.ruanyifeng.com/blog/2014/10/event-loop.html
<<JavaScript高級程序設計>>
?
轉載于:https://www.cnblogs.com/haimengqingyuan/p/7216448.html
總結
以上是生活随笔為你收集整理的JavaScript单线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nodejs 全局变量和全局对象
- 下一篇: C#流对象使用完后不立即释放的问题