Hignly scalable web server
for web application
Javascript
V8
中間層 (libuv)
網卡
硬碟
...
非同步的應用廣泛,但在當時一般後端語言 EX: php 就不支援非同步的開發及多執行緒應用
// 耗費時間M
getData('from_db');
// 耗費時間N
getData('from_remote_api', function (result) {});
max(M, N, ...) vs M+N+...
非阻塞 I/O 不需等資料讀完
read
select
poll
epoll
kquene
fs.open = function (path, flags, mode, callback) {
// ...
binding.open(pathModule._makeLong(path),
stringToFlags(flags),
mode,
callback);
}
// 請求物件
req_wrap->object_->Set(oncomplete_sym, callback);
// 放入執行緒池
QueneUserWorkItem();
// 完成後通知 AIO
PostQUenedCompletionStatus();
// 事件迴圈 I/O 觀察者獲取可用的請求物件
GetQueuedCompletionStatus();
req_wrap->object_->Set(oncomplete_sym, callback);
QueneUserWorkItem();
PostQUenedCompletionStatus();
GetQueuedCompletionStatus();