1. 程式人生 > >非同步和單執行緒

非同步和單執行緒

一、什麼是非同步

1、非同步

console.log(100);
setTimeout(function(){
  console.log(200);
},1000);
console.log(300);
//輸出:100 300 200(等待1s)

非同步和同步的區別在於有無阻塞(非同步:先列印100,300,然後停頓1s列印200,不會出現阻塞 ;同步:先列印100,出現1s阻塞列印200,然後列印300)

2、前端非同步應用場景:

在可能發生等待的情況,等待過程中不能像alert一樣阻塞程式執行,即等待的情況下都需要非同步。

定時任務:setTimeout、setInverval
網路請求:ajax請求、動態<img>

載入
事件繫結

二、 單執行緒

一次只能幹一件事,只能一個一個按順序完成,不能一次執行多個函式,
單執行緒和非同步的關係:

console.log(100);
setTimeout(function(){
  console.log(200);
});
console.log(300);
//輸出:100 300 200

執行第一行列印100;執行setTimeout後,傳入的函式會被暫存起來不會立即執行(單執行緒不能同時幹兩件事);執行最後一行列印300;待所有程式執行完處於空閒狀態時會立馬檢視有沒有暫存起來的程式要執行,發現暫存起來的setTimeout中的函式無需等待時間,立即執行列印200

相關推薦

javaScript--非同步執行

參考:link. 一、什麼是非同步? console.log(100); setTimeout(function(){console.log(200)},1000) console.log(300); //輸出順序200 100 非同步和同步最大的區別在於有沒有阻塞程式的進行,上面

JS基礎知識(四)非同步執行

非同步和單執行緒 問題: 同步和非同步的區別是什麼?分別舉一個同步和非同步的例子 一個關於setTimeout的筆試題 console.log(1) setTimeout(function() { console.log(2) },0) console.log(

js非同步執行

1、同步和非同步的區別     a>同步會阻塞程式碼執行,非同步不會     b>alert()是同步  setTimeout()是非同步 2、關於setTimeout();

非同步執行

一、什麼是非同步 1、非同步 console.log(100); setTimeout(function(){ console.log(200); },1000); console.log(300); //輸出:100 300 200(等待1s)

JS三座大山再學習(三、非同步執行

本文已釋出在西瓜君的個人部落格,原文傳送門 前言 寫這一篇的時候,西瓜君查閱了很多資料和文章,但是相當多的文章寫的都很簡單,甚至互相之間有矛盾,這讓我很困擾;同時也讓我堅定了要寫出一篇好的關於JS非同步、單執行緒、事件迴圈的文章,下面,讓我們一起來學習本文吧,衝鴨~~ 單執行緒 ### 1. 什麼是單執行緒

AsyncContext非同步執行區別

AsyncContext不是非同步輸出時使用的,而是同步輸出,但是解放伺服器端的執行緒使用,使用AsyncContext的時候,對於瀏覽器來說,他們是同步在等待輸出的,但是對於伺服器端來說,處理此請求的執行緒並沒有卡在那裡等待,則是把當前的處理轉為執行緒池處理了,關鍵就在於執行緒池,伺服器端會起一個執行緒

非同步執行有什麼區別

非同步呼叫並不是要減少執行緒的開銷, 它的主要目的是讓呼叫方法的主執行緒不需要同步等待在這個函式呼叫上, 從而可以讓主執行緒繼續執行它下面的程式碼.與此同時, 系統會通過從ThreadPool中取一個執行緒來執行,幫助我們將我們要寫/讀的資料傳送到網絡卡.由於不需要我們等待, 我們等於同時做了兩件事情. 這

你怎麼理解多執行執行的區別

程式、程序、執行緒程式:由原始碼生成的可執行應用。 (例如:QQ.app)程序:一個正在執行的程式可以看做一個程序,(例如:正在執行的QQ警示一個勁曾),程序擁有獨立執行所需要的全部資源執行緒:程式中獨立執行的程式碼段。(例如:接收QQ訊息的程式碼)一個程序是由一或多個執行緒

C#中的非同步執行

許多開發人員對非同步程式碼和多執行緒以及它們的工作原理和使用方法都有錯誤的認識。在這裡,你將瞭解這兩個概念之間的區別,並使用c#實現它們。 我:“服務員,這是我第一次來這家餐廳。通常需要4個小時才能拿到食物嗎?” 服務員:“哦,是的,先生。這家餐廳的廚房裡只有一個廚師。” 我:“……只有一個廚師嗎?” 服務員

C#非同步執行以及Thread、ThreadPool、Task區別使用方法

本文的目的是為了讓大家瞭解什麼是非同步?什麼是多執行緒?如何實現多執行緒?對於當前C#當中三種實現多執行緒的方法如何實現和使用?什麼情景下選用哪一技術更好? 第一部分主要介紹在C#中非同步(async/await)和多執行緒的區別,以及async/await使用方法。 第二部分主要介紹在C#多執行緒當中Thr

JavaScript——從setTimeout()的執行了解js的執行非同步

眾所周知,JavaScript是單執行緒的,那麼到底什麼是單執行緒呢?今天我們就用setTimeout()舉例,看看單執行緒到底是什麼樣的。 單執行緒,從名字就能知道,它只有一個主執行緒。單執行緒就意味著,所有任務需要排隊,前一個任務結束,才會執行後一個任務。如果前一個任務

js的執行非同步

前言 說到js的單執行緒(single threaded)和非同步(asynchronous),很多同學不禁會想,這不是自相矛盾麼?其實,單執行緒和非同步確實不能同時成為一個語言的特性。js選擇了成為單執行緒的語言,所以它本身不可能是非同步的,但js的宿主環境(比如瀏覽

JavaScript的執行非同步

前言 我們都知道JavaScript是單執行緒語言,但有沒有想過JavaScript為什麼是單執行緒語言,而不採用效率更高的多執行緒呢?並且一個單執行緒語言又是如何能夠實現非同步操作的呢?接下來我們詳細討論JavaScript的單執行緒和非同步實現(注:理論層面的實現,非語言層面)。

執行、事件迴圈非同步IO

單執行緒 Node.js本身是多執行緒的,只是在解釋我們編寫的javascript程式碼時是由一個執行緒完成的,而底層是採用了多執行緒的方式來處理各種I/O操作的。 事件迴圈 在Node.js啟動動時, 會建立一個類似於while(true)

js執行非同步並不衝突

眾所周知,js是單執行緒的,但是我們又經常說js非同步,這是為什麼呢? 實際上瀏覽器的渲染過程是多執行緒的,它不只有js一個執行緒,它還有GUI渲染執行緒、事件觸發執行緒、定時觸發器執行緒、非同步http請求執行緒等執行緒 js一次只能執行一個任務,當他有許

執行非同步-定時器

Js作為瀏覽器的指令碼語言,其最根本的作用是實現使用者與瀏覽器的互動行為,操作DOM決定它是單執行緒。例如:當一個使用者要刪除一個A,同時又要向A中新增內容,瀏覽器該以哪個執行緒為準。同步任務:只有前一個任務執行完成後,才可執行下一個任務,在主執行緒中非同步任務:這個佇列的所

非同步、+回撥機制、執行queue、執行Event、協程、執行實現遇到IO切換

# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor # import requests # import os # import time # import random # # def get(

Python-爬取妹子圖(執行執行版本)

一、參考文章     Python爬蟲之——爬取妹子圖片     上述文章中的程式碼講述的非常清楚,我的基本能思路也是這樣,本篇文章中的程式碼僅僅做了一些異常處理和一些日誌顯示優化工作,寫此文章主要是當做筆記,方便以後查閱,修改的地方如下: 1、異常處理

Python-爬取校花網視訊(執行執行版本)

一、參考文章     python爬蟲爬取校花網視訊,單執行緒爬取     爬蟲----爬取校花網視訊,包含多執行緒版本     上述兩篇文章都是對校花網視訊的爬取,由於時間相隔很久了,校花網上的一些視訊已經不存在了,因此上

02-node.js 執行,‘ 非同步’非阻塞io

1、基本概念     同步:多個任務順序執行     非同步:多個任務並排執行 2、node的併發實現原理     Node JS是單執行緒應用程式,但它通過事件和回撥概念,支援併發。 由於Node JS每一個API是非同步的,作為一個單獨的執行緒,它使用非同步函