《Node.js事件循环》笔记
在Node.js中,事件循环是实现异步I/O的关键,是必须要了解的知识。这篇笔记是我读官方文档里关于事件循环的文章得来的。 事件循环的概念 事件循环使单线程的JavaScript实现了异步I/O操作,通过将负载交给系统内核执行。由于大多数的现代操作系统都是多线程的,能在后台执行多任务的操作。当后台操作完成后,内核(kernel)通知Node.js,这样的话回调函数就可以添加到poll队列中,直到执行完成。
在Node.js中,事件循环是实现异步I/O的关键,是必须要了解的知识。这篇笔记是我读官方文档里关于事件循环的文章得来的。 事件循环的概念 事件循环使单线程的JavaScript实现了异步I/O操作,通过将负载交给系统内核执行。由于大多数的现代操作系统都是多线程的,能在后台执行多任务的操作。当后台操作完成后,内核(kernel)通知Node.js,这样的话回调函数就可以添加到poll队列中,直到执行完成。
Node.js中有三个和定时相关的API: setTimeout(), setInterval(), setImmediate(),他们都位于timers模块中。而且timers模块是全局模块,不需要用require导入就可以使用。 setTimeoutsetTimeout()的第一个参数时一段时间后执行的函数,第二个参数多少毫秒(ms)后;但是Node.js无法保证毫秒不差,只能保证不早于设置的时间。 返回Timeout对象,可以使用clearTimeout()取消定时任务,也可以使使用unref()函数改变其行为。
在Node.js中,导出一个对象可以用exports,也可以用module.exports,但是这两者是有些区别的。先看一个例子: 1234567891011//snippet-1:// foo1.jsexports.foo = "foo1";// foo2.jsmodule.exports.foo = "foo2";// bar.jsconsole.log(require('./foo1').foo); // Output: foo1console.log(require('./foo2').foo); // Output: foo2
一些常用或有用的代码段,积少成多。 http server1234567const http = require('http');http.createServer((request, response) => { response.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8'}); response.end('你好,跳跳');}).listen(8080);
nvm root 用户没有 npm 命令 From: https://stackoverflow.com/questions/21215059/cant-use-nvm-from-root-or-sudo 12345# run thisn=$(...
winston string debug morgan