js異步和同步、阻塞和非阻塞、進程和線程的總結

js異步和同步、阻塞和非阻塞、進程和線程的總結

1.什麼是單線程和多線程

在編程語言中,有的語言是多線程的,有的是單線程的,好比java就是多線程的javascript是單線程的。 也就是說js就像一條流水線,只能在這僅僅一條流水線上幹活,不能開闢多個線程;而Java能夠經過類繼承在開闢個進程。javascript

2.進程和線程的區別

進程:一個項目運行就表示一個進程,進程是操做系統分配和調度資源的基本單位 進程之間是相互獨立。html

好比瀏覽器打開多個選項卡,是典型多進程的項目 每個選項卡都是一個獨立的進程 ,他們之間是相互不影響,一個進程關閉了,不會影響另外一個進程。java

線程:在一個進程中,包含若干個線程,真正幹活的是線程,如工廠--->進程 工人--->線程編程

3.同步和異步的區分

同步含義是「一塊兒」,異步含義是「一邊……一邊……」瀏覽器

在編程思想裏面理解爲:bash

同步:代碼的書寫順序和代碼的執行順序同樣多線程

異步:代碼的書寫順序和代碼的執行順序不同 例如:setTimeout() btn.onclick = function(){}異步

console.log("start")
    // 先獲取button按鈕  document文檔--->html文檔
    var btn = document.getElementById("btn")   // =  賦值運算符  
    // 給按鈕註冊一個點擊事件  btn叫事件源  click叫事件名   function(){} 函數  當事件發生時,作什麼
    // 異步代碼
    btn.onclick = function(){
        alert("登陸成功了....")
    }
    console.log("end")
複製代碼

同步、異步執行順序:(任務一和任務三是同步任務,任務二是異步任務) 編程語言

總結:一種是同步任務,另外一種是異步任務。同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;異步任務指的是,不進入主線程、而進入"異步任務隊列"的任務,只有等主線程任務執行完畢,"異步任務隊列"開始通知主線程,請求執行任務,該任務纔會進入主線程執行。函數

4.阻塞和非阻塞的區別

總結:同步、異步:只是對於熱水壺。普通水壺表明同步;響水壺表明異步。雖然都能幹活,但響水壺能夠在本身完工以後,提示小楊水開了。

阻塞、非阻塞:僅僅表明小楊,立等的屬於阻塞(1,3);幹別的事了屬於非阻塞(2,4)。

因此在上述同步阻塞、同步非阻塞、異步阻塞、異步非阻塞中,異步非阻塞狀況下效率較高。

下面代碼屬於同步阻塞:

在while循環中一直是死循環,會一直執行循環,下面的任務不能執行,稱爲同步阻塞。

console.log(1)  // 同步
    // 死循環
    while(true){    // 同步
        console.log("....")
    }
    console.log(2)   // 同步
複製代碼

下面代碼是異步非阻塞:

<script>
    console.log("start")
    // 先獲取button按鈕  document文檔--->html文檔
    var btn = document.getElementById("btn")   // 
    // 給按鈕註冊一個點擊事件  btn叫事件源  click叫事件名
    // 異步代碼
    btn.onclick = function(){
        alert("登陸成功了....")
    }
    console.log("end")
    // 說明:代碼裏面明明順序是這樣的,start,登陸成功了....,end
    // 可是咱們在執行代碼結果是這樣的,start,end,當你點擊了按鈕,那麼纔打印了登陸成功了,
</script>
複製代碼
相關文章
相關標籤/搜索