c++ - 哪些因素应该决定我的 C++ 网络服务器上的线程数?

标签 c++ multithreading boost-thread

我知道通常工作线程的数量应该等于服务器上的 CPU 数量(在我的例子中是 8 个),除非线程正在执行某种 I/O 等。

我的网络服务器提供的服务需要在我的 mysql 数据库中进行大量搜索,在最坏的情况下,某些查询需要大约 16 秒。所以这里有两个问题, 1. 如何确定最佳线程数? 2. 如何模拟数千个用户并针对数千个请求测试我的服务器?

最佳答案

这取决于您对“线程”的定义。

如果您的线程正在“阻塞”...因为它们一次只处理一个客户端——8 个线程将是一个糟糕的选择。如果您的工作线程都执行非阻塞 I/O,那么是的,将线程与 CPU 计数相匹配将是一个不错的选择。

要考虑的另一件事是您的数据库调用是否是非阻塞的。我不确定您正在使用哪种语言编写脚本(或者您是否也在使用 C++ 编写脚本?),但是例如 Mysql 的 c 版本会阻止查询。

如果您正在寻找强大的性能,我会看一下 NGiNX 和 G-WAN——它们是该领域的领导者。

http://nginx.org/

http://www.trustleap.com/

此外,对于负载测试:http://httpd.apache.org/docs/2.0/programs/ab.htmlhttp://www.hpl.hp.com/research/linux/httperf/

关于c++ - 哪些因素应该决定我的 C++ 网络服务器上的线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453023/

相关文章:

c++ - 问题 : 'const int * const & alias_for_ptr = ptr;' , 为什么两个标识符有不同的值?

c++ - 从 boost::function 中提取参数

C++ 入门练习

标准库中值和对象的 C++11 示例?

c# - 定时器和线程的问题

java - 线程和中断

c++ - 对 boost::asio::io_context::run() 和 boost::thread::join() 感到困惑

c++ - 十进制值:cout << dec << boost::this_thread::get_id()

c++ - EB GUIDE:在 QNX 上加载着色器插件时,缺少对 gtf::scdr::RenderObjectBase 的 undefined reference

python - 非阻塞服务器 Apache Thrift Python