摘要:特性單線程說明也許你會問,為什么還不安裝還不寫代碼還不講模塊前面我說過,不會一來就。另外,單線程中,操作系統沒有創建銷毀線程的時間開銷。單線程缺點如果有用戶造成線程崩潰,那個整個系統都崩潰了。
nodejs特性1--單線程
說明:也許你會問,為什么還不安裝nodejs?還不寫代碼?還不講模塊?前面我說過,不會一來就hello world。而是會先跟大家講講nodejs的特點,只有大家明白、理解nodejs的特點,在后面的模塊學習中,會有種豁然開朗的感覺,也會更加明白為什么nodejs會這樣設計;比起一上來就看文檔、寫代碼更加事半功倍;比起代碼層面的東西,原理更為重要!
在php,java語言中,會為每一個客戶端連接都創建一個新的線程。以php(php-fpm、單進程單線程)為例,每一個php-fpm工作線程大概消耗20M內存,一個8G的服務器,大概同時支持400個左右客戶端連接。要想支持更加多的客戶端連接,只能增加服務器數量,這樣一來硬件的費用成本就上來了。
在nodejs始終只有唯一一個線程,它不為每一個客戶端的連接新開線程。據某些測試,一個8G內存的服務器同時支持4萬了連接。nodejs通過自己內部事件機制、異步I/O,在宏觀上達到并行。
例子說明:
如一個任務中有3個線程;
在多線程中(圖1),它3個線程是同時并行的,但由于每個線程中都有I/O操作,都要等阻塞I/O完成后才能進行下面的程序。
圖1
在Nodejs單線程中,首先會把所有要執行的線程放到“事件棧”中,在開始執行第一個線程后,遇到I/O時,會馬上把當前的I/o操作放到事件棧中并開始執行線程2;當線程1的I/O執行完成后,程序會回到線程1,并執行線程1的程序2;當線程2中遇到I/O,也會放到事件棧中;程序轉而去處理其他;就是這樣的循環,讓程序達到并行效果,這個線程的利用率是100%的。
圖2
如果你還不明白的話,我們可以用生活的例子來進一步說明:餐廳和服務員的關系;多線程--招很多個服務員,每個服務員干特定的活(點菜、沖茶、收桌子),干完自己的活后可以休息;而單線程--只招了一個服務員,所有的活都有他自己一個人干,干什么他自己決定,甚至點菜干到一半,去把沖茶干完后,再回來繼續點菜也可以。
另外,單線程中,操作系統沒有創建、銷毀線程的時間開銷。
單線程缺點:如果有用戶造成線程崩潰,那個整個系統都崩潰了。(不過nodejs很難崩潰,會有相應的錯誤事件處理)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93149.html
摘要:事件驅動在中,當某個執行完畢后,會以事件的形式通知執行操作的線程而線程去執行對應事件的回調函數。為了處理異步,線程必須要有事件循環,不斷的檢查有沒有事件要處理,并依次處理。其實在底層中,有一半的代碼,都是在處理事件隊列回調函數。 事件驅動 上一節中,我們提到異步I/O;當I/O處理完畢后,nodejs是怎樣知道I/O已經完成了呢?又是怎樣去處理的呢?答案是:事件驅動(事件循環)機制。 ...
摘要:非阻塞下面我們繼續看看的第個特性非阻塞異步首先,看看什么是非阻塞呢操作,在程序中我們可以廣泛的認為是從數據庫讀數據從硬盤上讀寫文件等。當處理完畢后,是怎樣知道該完成了這里就要說到第個特性了事件驅動。 非阻塞I/O 下面我們繼續看看,nodejs的第2個特性--非阻塞I/O(異步I/O) 首先,看看什么是非阻塞I/O呢?I/O操作,在程序中我們可以廣泛的認為是:從數據庫讀數據、從硬盤上讀...
摘要:是什么官網上的定義翻譯過來是一個基于引擎的運行環境。使用了一個事件驅動非阻塞式的模型,使其輕量又高效。的包管理器,是全球最大的開源庫生態系統。的特點非常重要單線程事件驅動事件循環非阻塞異步所謂的特點,就是是怎樣解決服務器高性能的問題。 nodejs是什么 nodejs官網(nodejs.org)上的定義:Node.js? is a JavaScript runtime built on...
摘要:基礎篇整合最近有朋友也想學習相關方面的知識,如果你是后端想接近前端,作為一門跑在服務端的語言從這里入門再好不過了。事件驅動機制是通過內部單線程高效率地維護事件循環隊列來實現的,沒有多線程的資源占用和上下文的切換。 nodeJs 基礎篇整合 最近有朋友也想學習nodeJs相關方面的知識,如果你是后端想接近前端,node作為一門跑在服務端的JS語言從這里入門再好不過了。如果你正好喜歡前端,...
摘要:基礎篇整合最近有朋友也想學習相關方面的知識,如果你是后端想接近前端,作為一門跑在服務端的語言從這里入門再好不過了。事件驅動機制是通過內部單線程高效率地維護事件循環隊列來實現的,沒有多線程的資源占用和上下文的切換。 nodeJs 基礎篇整合 最近有朋友也想學習nodeJs相關方面的知識,如果你是后端想接近前端,node作為一門跑在服務端的JS語言從這里入門再好不過了。如果你正好喜歡前端,...
閱讀 683·2021-11-23 09:51
閱讀 3275·2019-08-30 15:54
閱讀 440·2019-08-30 15:52
閱讀 3108·2019-08-30 13:58
閱讀 2912·2019-08-30 13:53
閱讀 2684·2019-08-29 14:18
閱讀 2407·2019-08-27 10:54
閱讀 2364·2019-08-26 18:09