我用C++开发了一个迷你HTTP服务器,使用boost :: asio,现在我用多个客户端加载测试它,我一直无法接近饱和CPU.我正在测试一个Amazon EC2实例,大约50%使用一个cpu,20%使用另一个cpu,其余两个闲置(根据htop).
细节:
那么,我应该怎样看待改善这一结果呢?鉴于CPU大部分处于空闲状态,我希望利用这些额外的容量来获得更高的吞吐量,比如800请求/秒等等.
我有过的想法:
我正在尝试使用boost :: asio创建一个有限的线程池类.但是我被困在某一点可以帮助我.
唯一的问题是我应该减少反击的地方?
代码无法按预期工作.
问题是我不知道我的线程何时完成执行以及我将如何知道它已经返回池中
#include <boost/asio.hpp>
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>
#include <boost/thread/mutex.hpp>
#include <stack>
using namespace std;
using namespace boost;
class ThreadPool
{
static int count;
int NoOfThread;
thread_group grp;
mutex mutex_;
asio::io_service io_service;
int counter;
stack<thread*> thStk ;
public:
ThreadPool(int num)
{
NoOfThread = num;
counter = 0;
mutex::scoped_lock lock(mutex_);
if(count == 0)
count++;
else
return;
for(int i=0 ; i<num ; ++i)
{
thStk.push(grp.create_thread(boost::bind(&asio::io_service::run, &io_service)));
}
}
~ThreadPool()
{
io_service.stop();
grp.join_all();
}
thread* getThread()
{ …Run Code Online (Sandbox Code Playgroud)