boost::asio::io_service 的本质是一个消费者模型。以下是多线程环境下的效率测试结果:空转时大约 150W QPS,模拟 find 操作时大约 80W QPS。
std::map<int, int> _x;
int QPS_WRITE = 0;
io_service io;
int main(int argc, char* argv[])
{
for (int i = 0; i < 10000; i++)
{
_x[i] = i;
}
for (int i = 0; i < 50; i++)
{
std::thread t([&]()
{
while (true)
{
this_thread::sleep_for(std::chrono::nanoseconds(1));
for (int i = 0; i < 16; i++)
io.post([&]()
{
++QPS_WRITE;
for (int ii = 0; ii < 10; ii++)
auto x = _x.find(ii);
});
}
});
t.detach();
}
std::thread t([&]()
{
while (true)
{
this_thread::sleep_for(std::chrono::seconds(1));
cout << QPS_WRITE << endl;
QPS_WRITE = 0;
}
});
t.detach();
io_service::work work(io);
io.run();
::system("pause");
return 0;
}