【问题标题】:Writing High Performance Server. Which method?编写高性能服务器。哪种方法?
【发布时间】:2011-03-24 10:27:05
【问题描述】:

如果您需要编写高性能服务器,您会怎么做?

  • 使用异步阻塞 epoll / kqueue? 但是这里如何处理阻塞系统调用 epoll/kqueue 呢?也许有一个使用工作线程执行阻塞 epoll/kqueue 的主线程?
  • 使用 libevent?它甚至与 epoll/kqueue 不同,因为它只封装了不同的机制,如 select、epoll、kqueue 等?
  • 或者使用 异步非阻塞 libaio 来代替异步阻塞 epoll/kqueue?但它甚至支持套接字还是只支持磁盘 IO?

感谢您的回答。

【问题讨论】:

  • 我想我会从弄清楚它应该提供什么服务并获得高性能的量化定义开始。

标签: unix asynchronous network-programming io


【解决方案1】:

我会使用 libevent。

它使用目标平台上可用的最佳机制,无论该机制是什么;因此,无需更改,您的程序将在 BSD 上使用 kqueue,在 Linux 上使用 epoll(4),以及在可能存在的任何其他情况下使用任何其他最好的方法,同时在旧平台上仍回退到 select(2),并且不知何故它也适用于窗户。

神奇的软件。 :)

【讨论】:

【解决方案2】:

我会使用boost::Asio
它使用每个系统的最佳非阻塞 IO

  • epoll for linux
  • 类似 NIX 的 kqueue
  • Windows 上的 I/O 重叠

它也可以处理其他流(COM、文件)。
概念很简单,创建 io_service 类并编写句柄(类事件)类来管理流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多