前置知識了解
一、解釋程式、行程、執行緒
- 程式:顧名思義啦,就是比如CSDN、wechat、微博都是一個獨立的程式
- 行程:行程就是我們獨立運行的一個程式,行程擁有獨立運行所需要的全部資源,主要負責資源的調度和分配,比如說正在運行的微博
- 執行緒:執行緒呢可以看成程式中獨立運行的代碼段,比如說我在微博上上傳一個視頻,可能這個視頻很大,在上傳程序中我不想一直等嘛,就去刷一刷想看的博主,這個時候可能就是兩個執行緒在作業,一個是上傳視頻的執行緒,一個是我們刷微博的執行緒,
- 關系:
(1)應用程式必須運行在某個行程的某個執行緒上
(2)一個行程中至少有一個運行的執行緒: 主執行緒, 行程啟動后自動創建
(3)一個行程中如果同時運行多個執行緒, 那這個程式是多執行緒運行的
(4)一個行程的記憶體空間是共享的,每個執行緒都可以使用這些共享記憶體,
(5)多個行程之間的資料是不能直接共享的
二、解釋單執行緒和多執行緒
- 單執行緒:
每個正在運行的程式(即行程),至少包括一個執行緒,這個執行緒叫主執行緒,主執行緒在程式啟動時被創建,用于執行main函式,只有一個主執行緒的程式,稱作單執行緒程式
主執行緒負責執行程式的所有代碼(UI展現以及重繪,網路請求,本地存盤等等),這些代碼只能順序執行,無法并發執行, - 多執行緒:
有多個執行緒,子執行緒和主執行緒都是獨立的運行單元,各自的執行互不影響,因此能夠并發執行,能有效地避免代碼阻塞,并且提高程式的運行性能,
三、為啥說JavaScript是單執行緒的呢
作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM,這決定了它只能是單執行緒,如果不是這樣,假定JavaScript同時有兩個執行緒,一個執行緒在某個DOM節點上添加內容,另一個執行緒洗掉了這個節點,這時瀏覽器應該以哪個執行緒為準?
但是為了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個執行緒,但是子執行緒完全受主執行緒控制,且不得操作DOM,所以,這個新標準并沒有改變JavaScript單執行緒的本質,關于JavaScript多執行緒操作可以看下這篇:https://cloud.tencent.com/developer/article/1389548
四、那它是單執行緒的,任務是咋執行的捏
單執行緒就是只有一個執行緒,就是主執行緒嘛,JavaScript和UI渲染占用同一個主執行緒,比如業務實作上我們要進行一個AJAX查詢,做一些資料處理,UI渲染就很有可能被阻斷,這個時候瀏覽器可能就會出現卡頓,降低了用戶體驗,那總得解決這個問題吧,javascript就產生了異步編程這個概念,進而就有了任務佇列、同步任務和異步任務的這個概念,
我們可以把高負載的任務使用異步處理,它們將會被放入瀏覽器的事件任務佇列(event loop)中去,等到JavaScript運行時執行執行緒空閑時候,事件佇列才會按照先進先出的原則被一一執行,
具體操作就是:主執行緒先執行JavaScript的同步任務,然后將異步任務的操作放到任務佇列中去,任務佇列中的異步任務采取的是先進先出的原則,等主執行緒上的同步任務執行完成后,再去執行任務佇列中的第一個異步任務,
這樣不是極大的優化的用戶的體驗,無需漫長等待回傳的資料,才能繼續執行下一步,哈哈哈哈,
大概就是這樣子,前端小白,有問題希望各位大佬指出糾正,
ps:這篇文章有借鑒:
1.https://www.cnblogs.com/Shd-Study/p/9297273.html
2.http://www.ruanyifeng.com/blog/2014/10/event-loop.html
3.https://cloud.tencent.com/developer/article/1389548
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/357131.html
標籤:其他
上一篇:React中的那些Hook的使用
