我正在设计一个高性能服务器(不是HTTP服务器),正在考虑我的设计选项.服务器应支持大量传入连接(以千计),并在Windows和Linux上进行编译.
在Windows端,我已经实现了IO完成端口服务器,到目前为止似乎处理压力.由于Linux需求弹出,我现在尝试找到一个跨平台库,它为我提供了一种方法来使用线程池的接受/读取事件.
到目前为止,LIBEVENT似乎是一个正确的选择(如"示例代码:回声服务器"的东西在这个链接).但引用libEvent文档中的另一个页面:
如果将event_base设置为使用锁定,则可以安全地在多个线程之间访问它.但是它的循环只能在一个线程中运行.如果要让多个线程轮询IO,则需要为每个线程分配一个event_base.
我的基本设计是让线程池响应接受和读取事件.如果我理解正确的话,这句话说我做不到.
有没有人有高性能的经验.基于libEvent的服务器?我应该使用不同的图书馆吗?
这种服务器的示例代码将是完美的
libevent 如果你想保持跨平台,那就是你要走的路.
如果你想要高效,我会推荐特定于平台的API,比如IO完成端口(你在Windows上工作)和epoll在Linux中:
请注意,libevent无论如何都会在Linux内部使用epoll.
至于你的多线程设计问题,我希望你没有使用一个线程来处理每个传入的客户端连接...如果你这样做,你将失去使用事件驱动模型的目的!您应该设计代码,以便单个线程处理少量客户端连接,并随着并发连接数的增加而增加线程数.
我也不会对客户端在正在接收数据的IO的线程池中发送的数据进行任何繁重的计算工作.我将执行网络密集型IO的任务与执行任何CPU密集型计算分成两个独立的线程池
| 归档时间: |
|
| 查看次数: |
3687 次 |
| 最近记录: |