首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C HTTP服务器-多线程模型?

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

Stack Overflow用户
提问于 2011-04-15 20:10:43
回答 5查看 2.5K关注 0票数 5

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

  1. 每个连接使用一个线程。简单,但不能处理许多连接。
  2. 只使用非阻塞API调用,并处理一个线程中的所有内容。听起来很有趣,但是使用select()和这样的过度被认为是相当慢的。
  3. 其他一些多线程模型,例如,像莱特普这样复杂的模型。(可能)最好的解决方案,但(可能)太难实现。

对此有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-15 21:05:30

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

此外,您的列表中还没有包括其他型号。特别是经典的UNIX“预叉”模型。

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

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

票数 5
EN

Stack Overflow用户

发布于 2011-04-15 20:13:46

是的,做一个你感兴趣的事。当您完成它时,如果您还没有完全厌倦这个项目,那么对其进行基准测试,分析它,并尝试其他技术之一。或者,更有趣的是,放弃工作,学习知识,继续做完全不同的事情。

票数 4
EN

Stack Overflow用户

发布于 2011-04-15 21:27:13

您可以使用一个事件循环,如node.js:中的

节点源代码(c,c++,javascript)

https://github.com/joyent/node

Ryan (节点的创建者)概述了node.js、非阻塞io和事件循环作为non服务器中多线程的替代设计的理由。

http://www.yuiblog.com/blog/2010/05/20/video-dahl/

道格拉斯·克罗克福德在第6场讨论了事件循环: Loopage (2010年8月27日,星期五)

http://www.yuiblog.com/blog/2010/08/30/yui-theater-douglas-crockford-crockford-on-javascript-scene-6-loopage-52-min/

道格拉斯·克罗克福德上述谈话的索引(如果需要更多的背景信息)。但并不适用于你的问题。

http://yuiblog.com/crockford/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5681853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档