node.js非阻塞io
如今,开发人员已经知道将Node.js作为服务器端javascript执行平台。
根据nodejs.org的说法,“ Node.js是基于ChromeJavaScript运行时构建的平台,可轻松构建快速,可扩展的网络应用程序。 Node.js使用事件驱动的非阻塞I / O模型,使其轻巧高效,非常适合跨分布式设备运行的数据密集型实时应用程序。”
现在,node.js打开了一种执行或服务于Web请求或任何其他类型的服务器请求的新方法-称为非阻塞IO操作。
我们遇到了以下链接– http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/是展示node.js的非阻塞概念以及与实际工作场景相关的一种极好的方法。
作为我过去5-6年担任J2ee程序员的背景,我了解并理解了J2ee Environment中的Servlet编程模型,它是一种多线程编程模型,即,当Web请求到达基于Java的Web服务器时,请求就到达了带有请求的servlet,然后servlet打开一个新线程来处理请求并将数据响应返回给客户端。 本质上共享的所有与数据库相关的方法或任何服务器资源密集型调用,都应从servlet进行仔细处理,以避免任何死锁或其他与共享库有关的不必要情况。
尽管通过这种方式,与服务器进程相比,进程分属于线程并在线程内为Web请求提供服务,这些开销具有相对较小的开销。 但是,即使在线程调用内执行请求和响应过程中某个数据库调用占用了相当长的时间,它仍将通过同步活动来阻止客户端进行此操作,从而阻止IO操作。
现在是时候了解定义了node.js平台的非阻塞I / O了。
首先,node.js应用程序环境将在单线程编程模型上运行。
node.js中的所有Web请求和服务器请求调用均属于非阻塞I / O。 一个Web请求进入node.js Web服务器,并且该Web服务器接受此请求并将此请求处理给侦听器对象以处理响应。 此外,该Web服务器将随时准备接受任何新的Web请求。 并且先前的响应处理将保留在队列中以执行其余操作。 现在,node.js环境负责准备Web响应,该响应又可以是来自实际应用程序的数据库调用。 此外,此数据库查询还可以包含回调函数,并且数据库的响应已准备就绪。 这些操作在队列中执行,也称为事件驱动编程,并且所有这些操作本质上都是异步的。
因此,这里讨论的重点是,node.js上下文中的所有函数调用都是非阻塞的输入输出操作。 在node.js环境中,执行操作由一个对象执行,并且操作的结果由回调函数处理。
我们将在这些应用程序体系结构的进一步工作中,进一步讨论node.js执行模型,事件驱动的编程和异步操作。
到此为止。 评论很好。
翻译自: https://www.javacodegeeks.com/2013/12/node-js-non-blocking-io-model.html
node.js非阻塞io