`

NodeJs在非阻塞实现原理?

阅读更多

 

 

     在传统的Web服务器中(如Tomcat或Apache), 当一个请求到来时,服务器会用一个专门的线程来处理这个请求。 这是因为对请求的处理会有IO的阻塞,如果让服务器的主线程来处理的话,它会由于阻塞而不能再接受新请求的处理。 

 

     当然,传统的Web服务器用单独线程处理请求也是有缺点的, 当请求数过多时,相应的线程也会多起来,这时线程的管理会是一个很大的开销。 

 

    这时,现在NodeJS出现了。按我现在的记忆(也就是从NodeJs的宣传材料那直接抄来的),它相比于传统Web服务器的最大优势是它不再需要单独的线程来处理单个的请求。 

 

不过, 这里理解上有问题:

    1, 不用单独的线程了,那这些请求是在NodeJs的主线程里处理?它是怎么来处理IO阻塞问题的? 从形式上看,NodeJs是用回调函数来实现的,不过从本质上讲,再怎么的回调函数也得执行,这些执行的并发是处理的? 说是跟操作系统的“epoll, kqueue, /dev/poll, or select”这些特性有关, 这些都是什么?

    2, Nginx好像也是跟select有关,那么在原理上,Nginx的select跟NodeJs的Select有什么异同?


0
3
分享到:
评论
1 楼 rmn190 2011-11-02  
两个链接是不是对这个问题的理解会有帮助? http://www.kegel.com/c10k.html 和 http://bulk.fefe.de/scalable-networking.pdf。

相关推荐

    NodeJS-技术讲解

    2. I/O 阻塞: NodeJS 通过非阻塞 I/O 模型解决了 I/O 阻塞的问题。 NodeJS 的优缺点: 优点: 1. 高并发(最重要的优点,据说可以应付百万级并发) 2. 适合 I/O 密集型应用 缺点: 1. 不适合 CPU 密集型应用...

    NodeJs图书8本

    1. **Node.js基础**:Node.js的基础概念,包括事件驱动模型、非阻塞I/O模型,以及如何安装和设置Node.js开发环境。这些内容通常会在《Node.js开发指南》中详细介绍。 2. **V8引擎**:Node.js使用Google的V8引擎来...

    nodejs使用手册(英文)

    ### Node.js 使用手册知识点概述 #### 一、Node.js 的起源与...- 通过事件驱动、非阻塞 I/O 模型以及高效的内存管理机制,Node.js 能够实现更高水平的并发处理能力,特别适合用于构建实时应用和高负载的 Web 服务。

    nodejs高级编程源码

    2. **非阻塞I/O**:Node.js使用单线程模型处理I/O操作,通过异步回调和事件循环来实现高效的并发处理。这种模式非常适合处理大量的并发连接,如构建高并发的Web服务器。 3. **模块系统**:Node.js的模块系统是基于...

    Node.js-NodeJS源码分析-由浅入深解析架构以及运行原理

    Node.js的核心设计理念在于使用非阻塞I/O和事件驱动模型,使其在处理高并发请求时表现出色。本篇文章将深入探讨Node.js的源码,解析其架构及运行原理。 一、事件循环(Event Loop) Node.js的运行机制离不开事件循环...

    NodeJS教程.rar

    NodeJS利用非阻塞I/O模型和事件驱动,使其在处理高并发请求时表现出高效性能,常用于构建实时、可扩展的网络应用。 本教程针对NodeJS初学者,旨在提供全面的NodeJS学习路径,帮助你从零开始掌握这一技术。通过学习...

    七天学会NodeJS

    NodeJS以其高效的非阻塞I/O模型和事件驱动特性,成为构建高性能网络应用的理想选择。 【七天学会NodeJS】这个教程可能是为了帮助初学者在一周内掌握NodeJS的基础知识和核心概念。通过这七天的学习,你可以了解如何...

    nodejs学习入门文档

    7. **阻塞与非阻塞操作**:对比阻塞与非阻塞操作的优缺点,强调在Node.js中使用非阻塞操作的重要性。 8. **代码组织与模块化**:强调代码的可读性和可维护性,通过模块化设计实现清晰的代码结构。 #### JavaScript...

    nodeJS基础入门

    - 非阻塞I/O模型:Node.js 使用异步事件驱动模型,使得程序在处理大量并发请求时表现出高性能。 - 单线程与事件循环:尽管 Node.js 应用是单线程运行的,但通过事件循环机制可以处理多个并发请求,提高了效率。 -...

    nodejs

    Node.js 使用事件驱动、非阻塞I/O模型,使其轻量又高效,尤其适合构建数据密集型的实时应用。 在Node.js中,"源码"是指V8引擎以及Node.js自身的C++源代码,这些源码对于深入理解其内部工作原理和优化性能至关重要。...

    轻松创建nodejs服务器(8):非阻塞是如何实现的

    在"轻松创建Node.js服务器(8):非阻塞是如何实现的"这一章节中,我们将深入探讨非阻塞I/O的工作原理,并通过实例分析如何在实际代码中实现这一机制。 首先,我们要理解非阻塞I/O的概念。在传统的同步I/O模型中,...

    nodejs案例

    非阻塞 I/O 允许 Node.js 在等待 I/O 操作完成时执行其他任务,提高程序的运行效率。事件驱动意味着程序会在特定事件(如文件读取完成、网络请求完成等)发生时调用回调函数,而不是一直等待这些操作完成。 在实现 ...

    介绍nodejs的文档

    Node.js的核心特性包括其非阻塞I/O模型,这使得它在处理大量并发连接时表现出色。由于JavaScript是单线程的,Node.js通过事件驱动和回调函数来处理并发,而非创建多个线程,从而降低了内存消耗和提升了效率。这种...

    Node.js-微型NodeJS接口配置转发工具

    通过深入研究这些文件,开发者可以学习到如何在Node.js中实现一个简单的HTTP代理服务器,理解非阻塞I/O的工作原理,以及如何通过配置文件进行动态配置。此外,还可能涉及到错误处理、日志记录、性能优化等方面的知识...

    nodejs入门

    本书会详细讲解这些特性,比如如何使用Node.js实现非阻塞I/O操作,这对于理解Node.js的性能和优势至关重要。 本书的作者建议有一定编程背景的读者阅读,因为这样可以更好地理解Node.js中使用的JavaScript语言与其他...

    NodeJs0.10.11+开发指南

    首先,Node.js的核心特性包括事件驱动、非阻塞I/O模型。这种轻量级且高效的设计使得Node.js非常适合构建实时、高并发的网络应用,如聊天服务、实时协作工具或者游戏服务器。Node.js的异步处理能力使得它能够高效地...

    NodeJs高级编程英文版

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其异步非阻塞I/O和事件驱动的模型而闻名,使得它在处理高并发场景时表现出色。Node.js允许开发者使用JavaScript编写服务器端代码,打破了传统的前端后端...

    nodejs的即时聊天程序

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它通过事件驱动、非阻塞I/O模型,让JavaScript得以在服务器端高效地运行。本项目是一个使用Node.js构建的即时聊天程序,适合初学者理解Web实时通信的基本原理...

    Nodejs libuv运行原理详解

    libuv是一个为Node.js提供跨平台底层I/O的库,负责管理线程池和执行各种I/O任务,从而使得Node.js能够在单个线程上以非阻塞的方式高效处理大量并发任务。下面详细探讨libuv的运行原理。 首先,libuv采用了事件驱动...

    nodejs+websocket实现简单的多人聊天

    在IT行业中,Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其高效的异步I/O和非阻塞I/O模型而闻名,非常适合构建实时、交互式的网络应用。WebSocket协议则是一种在客户端和服务器之间建立长连接的协议...

Global site tag (gtag.js) - Google Analytics