【问题标题】:Multithreaded server using threadpool使用线程池的多线程服务器
【发布时间】:2011-07-14 11:58:59
【问题描述】:

我正在计划一个多线程服务器(准确地说是 SCGI)。现在,我知道每个连接使用一个线程的传统方法不是很可扩展。我也不想使用像 libevent 这样花哨的东西,因为这是一个爱好项目,我不希望在我的代码库中有很多依赖项。

我正在考虑的方法是使用线程池,让一个线程监听网络以将任何进来的请求排队。池管理的线程然后将请求出列,接收数据并分别响应。

这样,我不会有持续创建线程的开销,同时仍然能够并行处理许多请求。

此架构设计中是否存在一些我不知道的基本问题,或者这是一个不理想但仍然可以的解决方案?

谢谢!

【问题讨论】:

    标签: multithreading architecture threadpool


    【解决方案1】:

    看起来不错。根据预计该服务器会看到多少负载,这可能是一种矫枉过正。

    每个连接一个线程就足够了,直到您开始并行处理数十个(如果不是数百个)请求。每个连接一个线程的优点是简单,放弃它可能不值得。

    另一方面,如果您正在寻找需要处理大量流量的东西(无论是像 webproxy 这样的外部还是像 memcache 这样的内部),您可能应该只使用 libevent。 AFAIK 所有大男孩都在使用它或非常相似的东西(memcache、haproxy 等)

    最后,如果您只是为了好玩而这样做,请随意使用 :) 使用所有这些拱门可以获得良好的性能。

    【讨论】:

    • 好吧,我的方法实际上是每个连接一个线程,一次只有一个活动线程的限制,并且它们在完成后不会被破坏:)。过度杀伤是我想避免的另一件事,这就是我不想使用 libevent 的原因......
    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2014-08-05
    相关资源
    最近更新 更多