这有点类似于boost :: asio异步性能.由于该问题没有确凿的答案,我发布了一个类似的问题,包含示例代码和统计信息以证明问题.
下面,我对同步和异步服务器应用程序进行了示例,它们在一个循环中连续向客户端发送25字节的消息.在客户端,我正在检查它能够以什么速率接收消息.样本设置非常简单.在同步服务器的情况下,它为每个客户端连接生成一个新线程,并且线程继续在循环中发送25字节的消息.在异步服务器的情况下,它每个客户端连接产生一个新线程,并且线程继续使用异步写入(主线程是调用的线程)在循环中发送25字节的消息ioservice.run().对于性能测试,我只使用一个客户端.
同步服务器代码:
#include <iostream>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using boost::asio::ip::tcp;
class tcp_connection : public boost::enable_shared_from_this<tcp_connection>
{
public:
typedef boost::shared_ptr<tcp_connection> pointer;
static pointer create(boost::asio::io_service& io_service)
{
return pointer(new tcp_connection(io_service));
}
tcp::socket& socket()
{
return socket_;
}
void start()
{
for (;;) {
try {
ssize_t len = boost::asio::write(socket_, boost::asio::buffer(message_));
if (len != message_.length()) {
std::cerr<<"Unable to write all the bytes"<<std::endl;
break;
}
if (len == -1) {
std::cerr<<"Remote …Run Code Online (Sandbox Code Playgroud)