哪些因素应该决定我的c++ web服务器上的线程数
What factors should decide the number of threads on my C++ webserver?
我理解通常工作线程的数量应该等于服务器上的cpu数量(在我的情况下是8),除非线程正在做某种I/O等。
我的web服务器提供的服务需要在我的mysql数据库中进行广泛的搜索,一些查询在最坏的情况下需要大约16秒。这里有两个问题,1. 如何确定最优的线程数?2. 如何模拟数千个用户并针对数千个请求测试服务器?
这取决于你对"线程"的定义。
如果你的线程"阻塞"…因为它们一次只能处理一个客户端——8个线程将是一个糟糕的选择。如果你的工作线程都做非阻塞I/O,那么是的,将线程与cpu计数匹配将是一个不错的选择。
另一件要考虑的事情是你的DB调用是否是非阻塞的。我不确定你在做什么语言的脚本(或者你在c++做吗?),但C版本的Mysql,例如阻塞查询。
如果你正在寻找巨大的性能,我会看看NGiNX和G-WAN——他们是这个领域的领导者。
http://nginx.org/http://www.trustleap.com/同样,对于负载测试:http://httpd.apache.org/docs/2.0/programs/ab.html或http://www.hpl.hp.com/research/linux/httperf/
对于任何性能度量,性能测试都是无可替代的。你可以考虑像n * number of CPUs
这样的理论测量,其中n
是一个小常数,但实际上没有什么可以代替经验验证。
附加说明:
由于内核之间CPU缓存同步的成本,将HTTP工作线程限制在物理 CPU内核(忽略超线程)是有意义的。
此外,weighttp
(由Lighty团队制作的多线程客户端)比(单线程)ApacheBench
更适合测试多核服务器:
- 客户端的单个线程不能使多个线程饱和
您可以将AB
和weighttp
给出的结果与这个公共域ab.c
包装器进行比较,该包装器已用于测试30多个Web服务器,缓存服务器和应用服务器。
作为奖励,ab.c
还收集RAM和CPU资源使用情况,除了请求/秒。
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 使用 ESP8266/8285 将字符串从 Web 服务器转换为字节数组
- Boost-Beast 异步 Web 套接字 服务器-客户端异步读写 不在控制台上写入输出
- 可能在OpenShift3上部署C Web服务器
- 无法从Web服务器读取UTF-8缓冲区
- 有没有人知道如何终止ESP8266 http Web服务器/接入点
- 封装ESP8266 Web服务器的粘合剂功能
- 从QT Web服务器处理多个客户端
- web服务器如何知道何时完全接收到HTTP请求
- 示例web服务器和endianness
- 如何在web服务器中使用c++应用程序
- C++轻量级linux web直通服务器
- C++中的多线程 Web 服务器
- Web 服务器缓冲区
- PHP Web服务器集成到本地运行的C++exe?他们是如何互动的
- 如何在C++服务器应用程序和django web应用程序之间进行通信
- 将我的简单winsock服务器/客户端应用程序变形为简单的Web服务器
- c++的简单Web服务器
- 在 Linux 中用C++编写的 Web 服务器/Web 服务
- 客户端-服务器Web应用程序