1. 程式人生 > >Nodejs之事件驅動+非阻塞io模型

Nodejs之事件驅動+非阻塞io模型

node是js執行環境。
基於v8引擎
特點:事件驅動、無阻塞的io模型
優勢:輕量、高效
node是門技術不是語言 java java .net c# node js。

1什麼是i/o?

   io input、output 輸入輸出,電腦的輸入輸出,例如音訊錄音表示聲音輸入、聽音樂是聲音的輸出
   網路上的傳輸全部是在傳字串,i/o在伺服器上可以理解為讀寫操作。

2什麼是併發?

   一個時間段中有幾個程式都處於已啟動執行到執行完畢之間。

3非同步i/o與事件驅動

3.1什麼是程序?

程序是為運行當中的應用程式提供執行環境的
一個運行當中的應用程式就會有一個程序與之相對應

3.2什麼是執行緒?

執行緒是用來執行應用程式中程式碼的,
一個執行緒在一個時間只能做一件事件。
多執行緒,排程起來很麻煩。
node是單執行緒執行,用非同步替代了多執行緒

3.3同步、非同步有什麼不同?

非同步不會阻塞後面的程式碼,同步會阻塞後面的程式碼
一條執行緒先執行同步的程式碼後執行非同步的程式碼。

3.4非同步非i/o操作和非同步i/o操作

非同步非io setTimeout setInterval
非同步IO操作 操作檔案 網路操作 fs

3.5node的事件驅動模型?

這裡寫圖片描述

主執行緒:

  • 1.執行node的程式碼,把程式碼放入佇列
  • 2.事件迴圈程式(主執行緒)把佇列裡面的同步程式碼都先執行了,
  • 3.同步程式碼執行完成,執行非同步程式碼
  • 4.非同步程式碼分2種狀況,

    • 1非同步非io setTimeout() setInterval()
      判斷是否可執行,如果可以執行就執行,不可以跳過。
    • 2非同步io 檔案操作
      會從執行緒池當中去取一條執行緒,幫助主執行緒去執行。

    主執行緒會一直輪詢,佇列中沒有程式碼了,主執行緒就會退出。

子執行緒:被放線上程池裡面的執行緒,用來執行非同步io操作

  • 1.線上程池裡休息
  • 2.非同步io的操作來了,執行非同步io操作。
  • 3.子執行緒會把非同步io操作的callback函式,扔回給佇列
  • 4.子執行緒會回到執行緒池了去休息。
    callback
    在非同步io程式碼執行完成的時候被扔回主執行緒。

3.6非同步和多執行緒的比較?

node的非同步是幫助我們去做了多執行緒的操作,簡化了程式碼。

相關推薦

Nodejs事件驅動+阻塞io模型

node是js執行環境。 基於v8引擎 特點:事件驅動、無阻塞的io模型 優勢:輕量、高效 node是門技術不是語言 java java .net c# node js。 1什麼是i/o?

nodejs的異步阻塞IO

nbsp png 使用 nod .com 輪詢 cnblogs 分享 strong 簡單表述一下:發啟向系統IO操作請求,系統使用線程池IO操作,執行完放到事件隊列裏,node主線程輪詢事件隊列,讀取結果與調用回調。所以說node並非真的單線程,還是使用了線程池的多線程。

基本IO模型阻塞IO模型

cep 格式 img 元組 nbsp 方法 處理 ddr 請求 基本IO模型 普通套接字實現的服務端一次只能服務一個客戶端 普通套接字實現的服務端的瓶頸在於在沒有新的套接字來之前, 不能處理已經建立連接的套接字的請求。具體解釋如下: 服務器套接字開始監聽後,就可接受客戶端

阻塞IO模型 nonblocking IO

非阻塞IO模型         非阻塞IO模型的就是將原來的阻塞操作變成非阻塞的,當原來阻塞操作程式設計操作後就會有訊號,沒有訊號的就就幹其他事情,迴圈詢問,迴圈執行其他事情,直到作業系統返回正確的訊號就會繼續執行。 import socket s

多路復用 阻塞/阻塞IO模型 網絡IO兩個階段

叠代 服務端 server mov adp wait 占用 ddr 但是 1.網絡IO的兩個階段 waitdata copydata send 先經歷:copydata階段 recv 先經歷:waitdata階段 再經歷 copydata階段2.阻塞的IO模型

IO模型阻塞IO

accept soc apt book nec sets asset python 輪詢 1. IO模型非阻塞 IO Linux下,可以通過設置socket使其變為 non-blocking。當對一個non-blocking socket執行讀操作時,流程是這個樣子:

python# 程序/執行緒/協程 # IO:同步/非同步/阻塞/阻塞 # greenlet gevent # 事件驅動與非同步IO # Select\Poll\Epoll非同步IO 以及selector

# 程序/執行緒/協程 # IO:同步/非同步/阻塞/非阻塞 # greenlet gevent # 事件驅動與非同步IO # Select\Poll\Epoll非同步IO 以及selectors模組 # Python佇列/RabbitMQ佇列   ###########

Linux下五種I/O模型詳解(阻塞IO阻塞IOIO複用、訊號驅動、非同步IO

文章轉載自微信公眾號:漫話程式設計 1 什麼是I/O 程式是由資料+指令構成的,執行程式的過程可以分成下面這幾步: 1.將程式碼載入到記憶體中,逐條執行記憶體中的程式碼 2.在執行程式碼的過程中,可能需要對檔案的讀寫,即將檔案輸入(Input)

並發編程 - IO模型 - 1.io模型/2.阻塞io/3.阻塞io/4.多路復用io

post app decode pos win 循環 效率 網絡io als 1.io模型提交任務得方式: 同步:提交完任務,等結果,執行下一個任務 異步:提交完,接著執行,異步 + 回調 異步不等結果,提交完任務,任務執行完後,會自動觸發回調函數同步不等於阻

IO模型《三》阻塞IO

非阻塞IO(non-blocking IO) Linux下,可以通過設定socket使其變為non-blocking。當對一個non-blocking socket執行讀操作時,流程是這個樣子: 從圖中可以看出,當用戶程序發出read操作時,如果kernel中的資料還沒有準備好,那麼它並不會block

IO模型——阻塞IO阻塞IO、多路複用IO、非同步IO、selectors模組

目錄 一、IO模型介紹   為了更好地瞭解IO模型,我們需要事先回顧下:同步、非同步、阻塞、非阻塞     同步(synchronous) IO和非同步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blo

NettyBIO(同步阻塞IO)、PIO(偽非同步阻塞IO)、NIO(非同步阻塞IO)、AIO(非同步阻塞IO

學習書籍:Netty權威指南 多種IO方式的比較: 1、BIO(同步阻塞IO) 使用ServerSocket繫結IP地址和監聽埠,客戶端發起連線,通過三次握手建立連線,用socket來進行通訊,通過輸入輸出流的方式來進行同步阻塞的通訊 每次客戶端發起連線請求,都會

nodejs事件驅動模型

Node.Js是基於javascript語言,建構在google V8 engine以及Linux上的一個非阻塞事件驅動IO框架。nodejs是單程序單執行緒,但是基於V8的強大驅動力,以及事件驅動模型,nodejs的效能非常高,而且想達到多核或者多程序也不是很

IO 模型--阻塞IO--day37

"""IO 模型 什麼是IO 指的是輸入輸出,其執行速度都非常慢 模型,指固定的套路 IO模型 就是 所有可以實現輸入輸出的套路IO的分類 1.本地IO 指的是輸入輸出到本地計算機 比如寫入硬碟 2.網路IO 指的是輸入輸出到 網路中的計算機 速度遠比本地IO慢(*****)網路

linux裝置驅動中的阻塞阻塞IO

一、等待佇列 1、定義等待佇列頭 wait_queue_head_t my_queue; 2、初始化等待佇列頭 init_waitqueue_head(&my_queue); 3、定義等待佇列 DECLARE_WAITQUEUE(name,tsk); 4、新增/移除

NettyBIO(同步阻塞IO)、PIO(偽非同步阻塞IO)、NIO(非同步阻塞IO)、AIO(非同步阻塞IO)、Netty

學習書籍:Netty權威指南 多種IO方式的比較: 1、BIO(同步阻塞IO) 使用ServerSocket繫結IP地址和監聽埠,客戶端發起連線,通過三次握手建立連線,用socket來進行通訊,通過輸入輸出流的方式來進行同步阻塞的通訊 每次客戶端發起連線請求,都會啟動一個執

Spring原始碼事件驅動模型

SpringContext中初始化事件釋出者 ### //spring初始化事件的地方 //spring初始化事件的地方 public abstract class AbstractApplicationContext extends DefaultResou

阻塞IO

tar move try 新建 strip() del connect err close 服務端 from socket import * import time server = socket(AF_INET,SOCK_STREAM) server.bind((‘12

阻塞IO阻塞IO、同步IO、異步IO&&Reactor模式

app sina shu cnblogs 模式 www. htm 同步 ast 3efwzy票僭吩恫越療http://tushu.docin.com/qce8764gnfwar謐浩贅敝客偽http://jz.docin.com/vcqx427mhqxji祭摳嘆頁畔僬http

epoll的水平觸發和邊緣觸發,以及邊緣觸發為什麽要使用阻塞IO

alt 開啟 本機 另一個 trigger stdio.h 什麽 我們 水平 轉自:http://www.cnblogs.com/yuuyuu/p/5103744.html 一.基本概念