我正在计划一个多线程服务器(确切地说是SCGI)。现在,我知道每个连接使用一个线程的传统方法不是很容易扩展。我也不想使用像libevent这样的东西,因为这是一个爱好项目,我不希望在我的代码库中有很多依赖项。
我正在考虑的方法是使用线程池并让一个线程监听网络以排队任何进入的请求。池管理的线程然后将请求出列,接收数据并分别响应。 / p>
这样,我就不会有持续线程创建的开销,同时仍能并行提供多个请求。
这个架构设计中是否存在一些我不知道的基本问题,或者这是一个不理想但仍然可行的解决方案?
谢谢!
答案 0 :(得分:1)
看起来不错。根据此服务器预计会看到多少负载,这可能是一种过度杀伤力。
每个连接一个线程就足够了,直到您开始处理数十个(如果不是数百个)并行请求。每个连接一个线程的优点是简单,并且可能不值得这样做。
另一方面,如果你正在寻找需要处理大量流量的东西(无论是像webproxy这样的外部还是像memcache这样的内部),你可能应该只使用libevent。 AFAIK所有大男孩都在使用它或类似的东西(memcache,haproxy等)
最后,如果你这样做只是为了好玩,只需使用你想要的任何东西:)所有这些拱门都可以获得良好的性能。