console.log
?實如今控制檯的打印,利用 process.stdout
將輸入流數據輸出到輸出流(即輸出到終端),好比javascript
process.stdout.write('你好,Node.js');
複製代碼
怎麼說呢,console 並不老是同步的,也不老是異步的。同步仍是異步取決於連接的是什麼流以及操做系統是 Windows 仍是 POSIX。java
POSIX,Portable Operating System Interface of UNIX,縮寫爲 POSIX,可移植操做系統接口。數據庫
同步寫可能會阻塞事件循環直到寫的過程完成。可能一瞬間就能寫到一個文件,但當系統處於高負載時,管道的接收端可能不會被讀取緩慢的終端或文件系統,由於事件循環被阻塞的足夠頻繁且足夠長的時間,這些可能會給系統性能帶來消極的影響。當你向一個交互終端會話寫時這可能不是個問題,但當生產日誌到進程的輸出流時要特別留心。異步
console.log()
執行完後就退出?好比下面一段,進程等待 3 秒後輸出 你好,Node.js!
,接着等待 3 秒後輸出 你好,Node.js2!
,而後退出。socket
setTimeout(() => {
console.log('你好,Node.js!');
}, 3000);
setTimeout(() => {
console.log('你好,Node.js2!');
}, 6000);
複製代碼
這裏就要牽扯到 Node.js 事件隊列。Node.js 會追蹤全部異步請求,當使用文件異步讀寫、socket 讀寫、定時器等異步操做時,全部的請求都會在事件隊列中。性能
net.Server.listen()
或者 http.Server.listen()
等端口監聽;fs.write()
類型的文件 IO 操做;console.log()
輸出日誌;setTimeout()
、setInterval()
等定時器操做;process.send()
等異步請求發送;注意:當全部異步操做都結束時,Node.js 的進程纔會退出。ui