Java 什么是事件驱动io(上下文:ApacheMina,JBossNetty)?

Java 什么是事件驱动io(上下文:ApacheMina,JBossNetty)?,java,web-services,asynchronous,Java,Web Services,Asynchronous,我想了解什么是事件驱动io。我听说它不同于传统的阻塞请求/响应模型。我们有什么例子来解释这一点吗?它将如何促进性能的提高 我们将非常感谢您的示例。我猜您已经有了4个月的答案。不管怎么说,这里是 内蒂 米娜 C10K 要了解evented io试图解决的部分问题,请查看上面的C10K链接。粗糙度是事件io的主要优点之一 传统的web服务器将处理请求,然后返回响应(同步/阻塞)。每个请求通常都需要自己的线程 事件驱动的web服务器将处理一个请求,然后创建一个事件(异步/非阻塞io),然后返回响

我想了解什么是事件驱动io。我听说它不同于传统的阻塞请求/响应模型。我们有什么例子来解释这一点吗?它将如何促进性能的提高


我们将非常感谢您的示例。

我猜您已经有了4个月的答案。不管怎么说,这里是

内蒂

米娜

C10K

要了解evented io试图解决的部分问题,请查看上面的C10K链接。粗糙度是事件io的主要优点之一

传统的web服务器将处理请求,然后返回响应(同步/阻塞)。每个请求通常都需要自己的线程

事件驱动的web服务器将处理一个请求,然后创建一个事件(异步/非阻塞io),然后返回响应。多个请求由单个线程/进程共享

事件IO应该能够处理每个线程比典型web服务器更多的请求。使用事件IO可能不会加快web应用程序的速度,但它应该比传统web服务器更容易处理大量连接。这意味着需要更少的机器进行缩放

尽管我认为事件io架构将迫使您开发web应用程序来处理较小的数据块。很像google mail类型的应用程序,它使用大量ajax调用在服务器上轮询数据,然后在浏览器中进行小的更新。这本身有很多好处,有助于加快和改进服务器的扩展


Netty和Mina提供了大量示例代码

我猜已经4个月了,你已经找到答案了。不管怎么说,这里是

内蒂

米娜

C10K

要了解evented io试图解决的部分问题,请查看上面的C10K链接。粗糙度是事件io的主要优点之一

传统的web服务器将处理请求,然后返回响应(同步/阻塞)。每个请求通常都需要自己的线程

事件驱动的web服务器将处理一个请求,然后创建一个事件(异步/非阻塞io),然后返回响应。多个请求由单个线程/进程共享

事件IO应该能够处理每个线程比典型web服务器更多的请求。使用事件IO可能不会加快web应用程序的速度,但它应该比传统web服务器更容易处理大量连接。这意味着需要更少的机器进行缩放

尽管我认为事件io架构将迫使您开发web应用程序来处理较小的数据块。很像google mail类型的应用程序,它使用大量ajax调用在服务器上轮询数据,然后在浏览器中进行小的更新。这本身有很多好处,有助于加快和改进服务器的扩展


Netty和Mina提供了大量示例代码

这是一个非常古老的问题,但我认为这可能有助于其他人理解事件驱动编程:

下面的类比可以帮助您理解事件驱动的I/O编程,方法是在医生的接待处画一条与等待线平行的线

阻塞I/O就像,如果你站在队列中,接待员会让你前面的一个人填写表格,她会等到他完成。你必须等着轮到你,直到那家伙完成他的表格,这是阻塞

如果单身汉需要3分钟来填写,那么第十个家伙必须等到30分钟。现在,为了减少等待时间,解决方案是增加接待员的数量,这是非常昂贵的。这就是传统web服务器中发生的情况。如果您请求一个用户信息,其他用户的后续请求应该等到当前操作(从数据库获取)完成。这增加了第10个请求的“响应时间”,并且第n个用户的响应时间呈指数增长。为了避免这种情况,传统的web服务器为每个请求创建线程(相当于增加接待员的数量),也就是说,基本上,它为每个请求创建一个服务器副本,这在CPU消耗方面是非常昂贵的,因为每个请求都需要一个操作系统线程。要扩大应用程序的规模,你必须在应用程序上投入大量的计算能力


事件驱动的:另一种扩大队列“响应时间”的方法是采用事件驱动的方法,队列中的家伙将被移交表单,要求填写并在完成后返回。因此,接待员可以随时接受请求。这正是javascript自诞生以来一直在做的事情。在浏览器中,javascript将响应用户点击事件、滚动、滑动或数据库获取等。这在javascript中是可能的,因为javascript将函数视为第一类对象,它们可以作为参数传递给其他函数(称为回调),并且可以在完成特定任务时调用。这正是node.js在服务器上所做的。您可以在node的上下文中找到有关事件驱动编程和阻塞i/o的更多信息这是一个非常古老的问题,但我认为这可能有助于其他人理解事件驱动编程:

下面的类比可以帮助您理解事件驱动的I/O编程,方法是在医生的接待处画一条与等待线平行的线

阻塞I/O就像,如果你站在队列中,接待员会让你前面的一个人填写表格,她会等到他完成。你必须等着轮到你,直到那家伙完成他的表格,这是阻塞

如果单身汉需要3分钟来填写,那么第十个家伙必须等到30分钟。现在,为了减少等待时间,解决方案是增加等待时间