在編程語言中,有的語言是多線程的,有的是單線程的,好比java就是多線程的,javascript是單線程的。 也就是說js就像一條流水線,只能在這僅僅一條流水線上幹活,不能開闢多個線程;而Java能夠經過類繼承在開闢個進程。javascript
進程:一個項目運行就表示一個進程,進程是操做系統分配和調度資源的基本單位 進程之間是相互獨立。html
好比瀏覽器打開多個選項卡,是典型多進程的項目 每個選項卡都是一個獨立的進程 ,他們之間是相互不影響,一個進程關閉了,不會影響另外一個進程。java
線程:在一個進程中,包含若干個線程,真正幹活的是線程,如工廠--->進程 工人--->線程編程
同步含義是「一塊兒」,異步含義是「一邊……一邊……」瀏覽器
在編程思想裏面理解爲: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")
複製代碼
同步、異步執行順序:(任務一和任務三是同步任務,任務二是異步任務) 編程語言
總結:一種是同步任務,另外一種是異步任務。同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;異步任務指的是,不進入主線程、而進入"異步任務隊列"的任務,只有等主線程任務執行完畢,"異步任務隊列"開始通知主線程,請求執行任務,該任務纔會進入主線程執行。函數
總結:同步、異步:只是對於熱水壺。普通水壺表明同步;響水壺表明異步。雖然都能幹活,但響水壺能夠在本身完工以後,提示小楊水開了。
阻塞、非阻塞:僅僅表明小楊,立等的屬於阻塞(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>
複製代碼