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