1、异步I/O
异步I/O 相比于同步I/O 效率更高,而且不一样的I/O 之间相互不影响,不阻塞
2、事件与回调函数
传递的是事件不是结果。
传递的思路是: 我要干这件事情,我把干这件事情的逻辑告诉你,你调用就可以了。
在javascript中,函数被作为第一等公民对待。函数可以作为一个参数传递。
http.createServer(function(request,response){
//解析 url 和request string
var pathName = url.parse(request.url).pathname;
//解析
route(handle,pathName);
response.writeHead(200,{"Content-Type":"text/plain"});
response.write('结果');
response.end();
}).listen(8890);
3、单线程(保持了js 在浏览器中特点)
优点:1、不存在死锁的问题,没有线程上下文交换所带来的性能的开销
2、单线程,系统开销少,可以胜任密集型I/O应用
弱点:无法利用多核cpu
错误会引起整个应用的退出,很考验应用的健壮性
大量计算占用cpu 导致无法继续调用异步 I/O (node 采用了与web worker 一致的思路解决大计算量阻塞线程的问题: child_process)
4、跨平台,这个就不多说了
居于以上node的特点,node 比较适合应用在I/O 密集型场景下,当然在cpu密集型的场景也能够胜任,只是在合理调度这块应该应该多思考,这和其他语言也是一样的。