李軼
(江漢大學 數學與計算機科學學院,湖北 武漢 430056)
基于Node.js的JavaScript并發控制流框架
李軼
(江漢大學 數學與計算機科學學院,湖北 武漢 430056)
Node.js因其異步I/O的特性,非常適合于服務器端的JavaScript開發。然而為實現此環境下異步I/O的并發控制,開發者不得不手工編寫繁瑣的代碼,因而給開發者造成了障礙。以并發計數器為基礎,可以設計一個并發控制流框架。該框架以直觀的調用形式,實現了異步I/O間的并發控制;其不僅有助于Node.js環境下的JavaScript開發,更提高了開發者的開發效率。
異步I/O;并發;同步;并發計數器;JavaScript
時至今日,JavaScript的應用領域早已從前端的Web瀏覽器,延伸到后臺服務器。作為一個基于V8[1]引擎的服務器端JavaScript環境,Node.js[2]從發布之初就備受矚目。Node.js以V8引擎的輕量、高效、快速為基礎,同時又提供了基于事件驅動的異步I/O(Asynchronous I/O)特性[3],使其非常適合于開發不同規模的數據密集型、實時型分布式應用。
異步I/O又稱為非阻塞式I/O,它是Node.js具有的獨特特性。不同于傳統的每客戶一服務線程的服務器架構,Node.js是單線程腳本環境。其核心思想是用一個服務線程應對多個客戶請求。當服務進程響應客戶請求執行I/O操作(如網絡I/O、文件I/O或數據庫I/O等)時,異步I/O可避免因服務線程被I/O操作阻塞而無法響應其他用戶請求的情況。因此,異步I/O不僅避免了多服務線程對服務器資源的過多占用,又提高了服務線程的執行效率,從而使一個服務線程就能應對大量的并發客戶請求。
在調用異步I/O函數時,通常都需要指定一個或多個回調函數作為其參數。……