nodejs缺點:預設
無法利用多核cpu
單執行緒如果出錯整個程崩潰序
不適合密集cpu計算
參考瀏覽器中 web work,node通過child_process來實現子執行緒,通過訊號與主線程通訊,構建master-worker架構
跨平台 libuv元件
模組1核心模組: 原始碼編譯時二進位制,啟動node程序時被載入進記憶體,在require時直接進入執行階段
快取載入->核心模組
2路徑形式
3自定義(node_modules):完全執行一下過程
所有模組第一次載入後都會編譯快取到記憶體,以後直接呼叫快取
查詢順訊
[ '/home/jackson/research/node_modules','/home/jackson/node_modules','/home/node_modules',
'/node_modules' ]
檔案定位
.js .json .node 目錄
如果檔案定位沒找到,卻找到了目錄,就把它看成乙個包,尋找package.json的main欄位,如果也沒有字尾就使用檔案定位,如果沒喲找到或者沒main,就查詢index使用檔案定位
nodejs在require模組過程:
分析路徑
檔案定位
編譯執行
模組編譯
js缺省會造成全域性汙染,node的模組中定義的變數之所以不會是因為編譯過程中每個模組都被包裹到乙個函式中進行作用域隔離,類似
(function (exports, require, module, __filename, __dirname) );
這個模組檔案被拼接成了字串,被vm呼叫執行返回乙個function,然後在當前模組的四個變數傳給他執行函式,返回exports
對於核心模組的編譯
1 js模組 /lib
2 c++模組 /src
編譯安裝原始碼時,先把js模組編譯成c++陣列,啟動node時,讀取編譯,過程和普通js檔案編譯方式一樣
c++模組在安裝node時已經編譯成二進位制檔案了
c++內建模組一般都是上層實現乙個js核心介面以供開發者呼叫,而不是直接呼叫c++介面
對於擴充套件c++需要自己編譯成.node格式,讓node 呼叫
包是對模組的組織起來,通過package.json
node 《深入淺出nodejs》 讀書筆記
事件驅動是指在持續事務管理過程中,進行決策的一種策略,即跟隨當前時間點上出現的事件,調動可用資源,執行相關任務,使不斷出現的問題得以解決,防止事務堆積。訊息是乙個報告事件發生的通知,訊息驅動是圍繞訊息的產生與處理展開的,並依靠訊息迴圈機制來實現。非阻塞io 單執行緒 多執行緒 死鎖 web work...
深入淺出MFC筆記
深入淺出mfc筆記 一 勿在浮砂築高台 1 並不是擴充套件名為 dll dynamic link library 的才是動態鏈結庫。事實上,exe dll fon mod drv 和.ocx 都是所謂的動態鏈結函式庫。2 windows 程式編譯時需要包含 windows.h 標頭檔案,若需要使用諸...
深入淺出記憶體管理 記憶體節點 Node
本文以linux核心4.9來做介紹。typedef struct pglist data pg data t enum 如上所示支援的分配方式有兩種,zonelist fallback和zonelist nofallback,那麼根據不同的分配方式,對於zone的優先順序可能是不同的,這個陣列可以記...