2012-02-04 63 views
3

开发Web服务器有哪些不同的方法?所以我想有(1)多线程(2)事件循环,还有什么?每种方法的优缺点是什么?你什么时候使用每个?你能列出每个方案的特定impl吗?开发Web服务器有哪些不同的方法?

回答

0

你应该添加非阻塞I/O。看看Netty

+1

(通常)event-loop和nio会聚在一起... – DuduAlul 2012-02-04 17:46:23

4

不同的方法可以是:

  1. 单线程:所有连接都通过单个线程 “监听”并等待连接和流程requests.It 很容易实现,但它是处理最没用的服务器,因为它可以 一次只能

  2. 多线程服务请求:服务器监听请求和每个传入 请求被分配到一个新的线程来处理it.So每个客户 连接由其专用线程处理。这种方法(不像 1)支持客户端请求的并发处理,但不 规模以及因为每个新创建的请求在服务器 一个新的线程,这需要很多resources.Eventually的服务器将达到一个极限

  3. 多线程池:与(2)相同,但不是创建新的线程来处理每个传入的请求,而是使用线程池 中的线程。线程被创建并放置在一个池中用于以后的重用。这种扩展能够很好地支持多个客户端请求,并且它是标准的方法。 Tomcat是这样工作的。

  4. 事件队列:每个传入的请求被放入一个队列中,并由后台线程处理,后台线程处理队列的请求。它是 非阻塞,这种类型的异步处理也很好地规模为 。老实说,我不知道它是否比(3)在 performance(3)好。我认为可以使用 NIO体系结构

0

一些服务器,例如G-WAN混合多线程,池事件队列,让服务器饱和CPU内核与每个线程处理许多连接。

Disclamer:我参与了这个项目的开发。

相关问题