gpt4 book ai didi

C HTTP 服务器 - 多线程模型?

转载 作者:太空狗 更新时间:2023-10-29 15:18:32 26 4
gpt4 key购买 nike

我目前正在用 C 编写一个 HTTP 服务器,以便学习 C、网络编程和 HTTP。我已经实现了大部分简单的东西,但我一次只处理一个连接。目前,我正在考虑如何有效地将多任务处理添加到我的项目中。以下是我考虑过的一些选项:

  1. 每个连接使用一个线程。简单但无法处理很多连接。
  2. 仅使用非阻塞 API 调用并在一个线程中处理所有事情。听起来很有趣,但据说过度使用 select() 会很慢。
  3. 一些其他的多线程模型,例如像 lighttpd 这样复杂的东西使用。 (可能)最好的解决方案,但(可能)太难实现。

对此有什么想法吗?

最佳答案

编写多任务网络服务器没有单一最佳模型。不同的平台有不同的高性能解决方案(I/O 完成端口、epoll、kqueues)。小心追求最大的可移植性:一些功能在其他平台上被模仿(即 select() 在 Windows 上可用)并且性能非常差,因为它们只是映射到其他一些 native 模型。

此外,还有其他型号未包含在您的列表中。特别是经典的 UNIX“预 fork ”模型。

在所有情况下,尽可能使用任何形式的异步 I/O。如果不是,请查看非阻塞同步 I/O。围绕异步数据流设计 HTTP 库,但将 I/O 位排除在外。这比听起来要难得多。它通常意味着为您的协议(protocol)解释器编写状态机。

最后一点最重要,因为它可以让您尝试不同的表示形式。它甚至可能允许您为每个平台本地编写一个紧凑的核心、高性能工具,并将该核心从一个平台交换到另一个平台。

关于C HTTP 服务器 - 多线程模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com