node里只有js引擎是单线程,不代表整个node都是单线程
2013-10-04 23:10
281 查看
原文见:田永强眼里的node
这里是摘要一下关键的话:
我们可以用Ajax和Web Worker回应这个误解(javascript是单线程的,无法很好利用多核CPU)。当Ajax请求发送之后,除非是同步请求,否则其余的JavaScript代码会很快被执行到。在Ajax发送完成,直到接收到响应的这段时间里,这个网络请求并不会阻塞JavaScript的执行,而网络请求已经发生,这是必然的事。那么,答案就很明显了,JavaScript确实是执行在单线程上的,但是,整个Web应用执行的宿主(浏览器)并非以单线程的方式在执行。而Web
Worker的产生,就是直接为了解决JavaScript与UI占用同一线程造成的UI响应问题的,它能新开一条线程去执行JavaScript
同理,NodeJS中的JavaScript也确实是在单线程上执行,但是作为宿主的NodeJS,它本身并非是单线程的,NodeJS在I/O方面有动用到一小部分额外的线程协助实现异步。程序员没有机会直接创建线程,这也是有的同学想当然的认为NodeJS的单线程无法很好的利用多核CPU的原因,他们甚至会说,难以想象由多人一起协作开发一个单线程的程序
这里是摘要一下关键的话:
我们可以用Ajax和Web Worker回应这个误解(javascript是单线程的,无法很好利用多核CPU)。当Ajax请求发送之后,除非是同步请求,否则其余的JavaScript代码会很快被执行到。在Ajax发送完成,直到接收到响应的这段时间里,这个网络请求并不会阻塞JavaScript的执行,而网络请求已经发生,这是必然的事。那么,答案就很明显了,JavaScript确实是执行在单线程上的,但是,整个Web应用执行的宿主(浏览器)并非以单线程的方式在执行。而Web
Worker的产生,就是直接为了解决JavaScript与UI占用同一线程造成的UI响应问题的,它能新开一条线程去执行JavaScript
同理,NodeJS中的JavaScript也确实是在单线程上执行,但是作为宿主的NodeJS,它本身并非是单线程的,NodeJS在I/O方面有动用到一小部分额外的线程协助实现异步。程序员没有机会直接创建线程,这也是有的同学想当然的认为NodeJS的单线程无法很好的利用多核CPU的原因,他们甚至会说,难以想象由多人一起协作开发一个单线程的程序
相关文章推荐
- Node.js express框架 静态路由托管 使用ejs模板引擎
- Node.js学习(14)----EJS模板引擎
- 基于Node.js的模板引擎大比拼
- 你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
- Node.js学习(13)----Jade模板引擎
- JavaScript基础:JS函数中声明的所有变量在整个函数中都是有定义的
- Node.js开发入门—使用jade模板引擎
- 一个周末掌握IT前沿技术之node.js篇<三>:Node.js与服务端模板引擎
- node.js ejs的视图模块引擎
- 为您的 Node 性能选择最佳的 JS 引擎
- node.js的ejs模版引擎
- Node.js 有关模版引擎ejs和jade的结合(非express)
- Node.js 使用jade模板引擎的示例
- JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序
- Google 的V8 JS引擎和Node.JS
- node.js:怎样同时执行多条SQLs,且只有一个回调
- JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”QQ253079952
- node.js中的模板引擎jade、handlebars、ejs
- IT前沿技术之node.js篇<六>:Node.js与客户端模板引擎
- [js高手之路]Node.js模板引擎教程-jade速学与实战2-流程控制,转义与非转义