我想编写一个简单的多人游戏作为我的 C++ 学习项目的一部分。
所以我想,既然我在做,我想正确地做它,而不是仅仅完成它。
如果我理解正确:Apache 使用 Thread-per-connection 架构,而 nginx 使用事件循环,然后为传入连接专用一个工作者[x]。我猜 nginx 更聪明,因为它支持更高的并发级别。对?
我也遇到过这个巧妙的类比,但我不确定它是否适用于我的情况。这个比喻似乎也很理想主义。我很少看到我的计算机以 100% 的 CPU 运行(即使打开了无数个 Chrome 选项卡,Photoshop 和其他不同时运行的东西)
另外,我遇到了一个 SO 帖子(不知何故它从我的历史中消失了),用户询问他们应该使用多少线程,其中一个答案是拥有大约 700 个甚至多达 10,000 个线程是完全可以接受的。不过,这个问题与 JVM 有关。
因此,让我们估计大约 5,000 个用户的虚构用户群。哪种方法应该是“最并发”的?
- 在一个线程中运行所有内容的反应器模式。
- 带有线程池的反应器模式(大约,您建议线程池应该有多大?
- 每个连接创建一个线程,然后销毁连接关闭的线程。
我承认选项 2 听起来对我来说是最好的解决方案,但我对这一切都很陌生,所以我可能有点天真并遗漏了一些明显的缺陷。此外,这听起来可能相当难以实施。
PS:我正在考虑使用POCO C++ Libraries。建议任何替代库(如boost)对我来说都很好。但是,许多人说 POCO 的库非常干净且易于理解。所以,我最好使用那个,这样我就可以了解我正在使用的东西。