昨天面了一家做教育信息化的公司,期间问到对nodejs的理解。虽然做了6年的web开发,但是一直在传统行业,对新技术一窍不通,深感自己眼界太窄。回来花了几个小时时间研究了一下,深深被这种技术吸引。以前一直认为js是无法访问服务器资源的,除非用activeX这种很受限的技术。接触了nodejs之后,才发现使用js可以构建一个完整web网站,而且可以处理高并发,这个是我以前没有想过的。下面对我这两天所学做一下记录,希望对有兴趣的同学有帮助。
1. 一般我们所说的js都指的是浏览器端的js, 其实不光浏览器可以执行js, 其它工具也可以,像nodejs的Chrome V8引擎
2. nodejs的执行原理
普通的web服务器都是开多线程处理用户请求,一个用户访问就会开一个单独的服务器线程。
这个的坏处时在高并发时,CPU要不断进行线程切换,这对性能会是一笔不小的开销
而nodejs采用单线程模型,避免了这种开销,但是又带来一个问题,单线程如何来处理多个服务请求呢,难道一直排队吗?
对的,每个用户请求都会放到请求队列中,但是对于耗时请求全部采用非阻塞的方式处理,比如查询
db.query('SELECT * from some_table', function(res) { res.output(); });
通过这种事件回调的方式来处理。
nodejs的致命缺陷
无法处理CPU密集型的并发请求,对于CPU密集型的请求,由于nodejs为单线程的,会阻塞主线程,使服务器性能缓慢
另外,无法合理利用多CPU的资源,由于是单线程,只能用一个CPU内核,会造成服务器CPU资源浪费