Threaded服务器 vs Evented 服务器

Threaded vs Evented Servers

在服务器端,目前共有两种方法处理并发请求:
(1)Threaded线程类服务器是使用多个并行线程来处理请求,每个线程处理一个客户端请求,典型的是J2EE或JavaEE服务器。

(2)Evented事件类服务器则是循环运行一个事件,用来处理所有连接客户端信息。

线程类服务器受限于CPU和线程界限,而事件类服务器并不受限于线程方面约束,因为它只用一个线程,只是受限于CPU能力。

文章对多个情况下两种模式性能比较,当我们需要执行一个后台服务,有高延迟high-latency(无高一致性要求场合),那么事件类服务器模式的性能要好些。

最后一个测试情况是long polling客户端,客户端发出长时间拉请求,也就是通常的AJAX发出的异步请求,事件类服务器模式要更好些。

转贴这篇文章想说明的是:jdonframework的domain events采取的是Evented事件类服务器模式,这种模式非常适合AJAX发出的轮询或高延迟的异步请求,这种模式对CPU负载低,不象传统同步多线程模式会Block堵塞住CPU。

适合事件类服务器模式是一些无需分享状态的应用,或者对状态的一致性要求比较低的应用,或者可以说对状态高一致性要求的避免使用事件类服务器模式。


2010年07月26日 11:48 "banq"的内容
jdonframework的domain events采取的是Evented事件类服务器模式 ...

难道说jdonframeworks是非Servlet2.5或者更早版本的实现?

2010年08月08日 19:02 "mercyblitz"的内容
难道说Jdonframeworks是非Servlet2.5或者更早版本的实现? ...

JF的domain events可以由传统的servlet来驱动,也可以直接由NIO来驱动,也就是说:业务事件的驱动和具体技术底层无关的。

(defn max-request-rate [t c w]
(let [cpu-bound (/ 1000 c)
thread-bound (* t (/ 1000 w))]
{:threaded (min cpu-bound thread-bound)
:evented cpu-bound}))


我就得这个公式有问题,不能单纯的用 C/1000, 这个模式当中,也会有W的时间的,比喻W可能是IO,这个IO也是需要CPU时间的呀

修改下 是1000/C