Node.js官方文档:关于Node.js
2017-02-08 14:00
330 查看
原文地址:https://nodejs.org/en/about/
这种编程模型和如今使用广泛的基于操作系统线程的并发编程模型行程了强烈的对比。基于线程的网络处理工作非常的低效并且难于使用。此外,Node开发人员得以从考虑各种进程死锁中解放出来,因为Node中根本就没有锁。在Node中几乎没有方法会直接操作I/O,因此进程从来不会被阻塞。因为没有阻塞,用Node开发可扩展的系统非常容易。
如果你觉得以上内容对你而言非常陌生,这里有一篇文章专门介绍“Blocking vs Non-Blocking”(阻塞式编程和非阻塞式编程:https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/)。
Node受到了Ruby的“Event Machine”和Python的“Twisted”非常多的影响,并且Node本身也和这两种架构非常类似。在此基础之上,Node对事件模型做了进一步的优化。Node在运行时通过事件循环(event loop)来进行主要操作。在其他系统中当事件处理机制触发时总是伴随着阻塞调用。在Node中我们会在脚本开头通过回调定义系统的常规行为,并且在脚本末尾通过一个阻塞调用形如:
HTTP是Node中的第一类型,并被设计为流式(streaming
4000
)和低延迟。这个特性使得Node非常适用于作为网络事务和系统框架来开发。
虽然Node在设计之初就尽可能规避线程这个概念,但这并不意味着你不能从多核环境中获得优势。子进程可以通过调用非常简单的
关于Node.js
作为一个异步事件驱动JavaScript执行环境,Node被设计来构建可扩展的网络应用。在下面这个“hello world”示例中,可以同时处理许多并发连接。根据每个连接请求,Node将会调用对应的回调函数。如果没有工作需要完成时,Node将会进入休眠状态。const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
这种编程模型和如今使用广泛的基于操作系统线程的并发编程模型行程了强烈的对比。基于线程的网络处理工作非常的低效并且难于使用。此外,Node开发人员得以从考虑各种进程死锁中解放出来,因为Node中根本就没有锁。在Node中几乎没有方法会直接操作I/O,因此进程从来不会被阻塞。因为没有阻塞,用Node开发可扩展的系统非常容易。
如果你觉得以上内容对你而言非常陌生,这里有一篇文章专门介绍“Blocking vs Non-Blocking”(阻塞式编程和非阻塞式编程:https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/)。
Node受到了Ruby的“Event Machine”和Python的“Twisted”非常多的影响,并且Node本身也和这两种架构非常类似。在此基础之上,Node对事件模型做了进一步的优化。Node在运行时通过事件循环(event loop)来进行主要操作。在其他系统中当事件处理机制触发时总是伴随着阻塞调用。在Node中我们会在脚本开头通过回调定义系统的常规行为,并且在脚本末尾通过一个阻塞调用形如:
EventMachine::run()来启动一个服务器。Node会在执行完输入脚本后直接进入事件循环机制。当系统中没有其他回调需要执行时,Node就会保持事件循环。这一特性正如浏览器中的JavaScript执行环境—开发人员永远也看不到事件循环机制的存在。
HTTP是Node中的第一类型,并被设计为流式(streaming
4000
)和低延迟。这个特性使得Node非常适用于作为网络事务和系统框架来开发。
虽然Node在设计之初就尽可能规避线程这个概念,但这并不意味着你不能从多核环境中获得优势。子进程可以通过调用非常简单的
child_process.fork()API而被大量生产出来。另一个基于相同接口的
cluster模型,能提供你在进程间分享sockets连接来使你系统的多核能够负载均衡。
相关文章推荐
- Node.js 官方文档中文版
- NodeJS官方文档中文版之《Node.js中的定时器》
- Dojo1.11官方教程文档翻译(2.4)Dojo和Node.js
- node.js官方文档chm电子书的制作
- 关于本文档 - Node.js API 文档
- Node.js-官方文档
- Node.js 关于HTML文档中的req.url理解
- 关于本文档 - Node.js API 文档
- 关于本文档 - Node.js API 文档
- 这个是微软官方关于office 2007转换pdf等格式的接口调用文档
- Node.js错误之关于formidable模块引用失败
- Oracle官方文档中关于DUPLICATE的文章
- 关于NodeJS + Express 3 使用 ejs 模板的问题
- 关于IIS、Jexus、Node.js、OpenResty的简单测试
- Node.js文档学习笔记(1)
- 关于RMAN 优化选项的配置----RMAN Optimization(发现官方文档有问题)
- 关于node.js语言的讨论(转)
- Knockout.js的官方文档
- (转)nodeJS 中文API node.js 中文文档
- 关于 Node.js: 所有PHP开发人员应该知道的5点