这是一个同步方法,今天出于某个目的写个很小的测试程序,结果惊奇地发现速度非常之慢。当时我使用的write是:
template<
typename SyncWriteStream,
typename ConstBufferSequence,
typename CompletionCondition>
std::size_t write(
SyncWriteStream & s,
const ConstBufferSequence & buffers,
CompletionCondition completion_condition,
boost::system::error_code & ec);
完成条件函数如下:
std::size_t testCompletionCondition
(const boost::system::error_code& error, std::size_t bytes_transferred)
{
cout << bytes_transferred << endl;
return 1;
}
结果发现每写一个字节(write一次写1000字节)就调用testCompletionCondition一次,也就是write一次会调用
testCompletionCondition函数1000次。结果导致每次write操作奇慢无比。
另外从这个函数的设计来说,asio对socket的同步操作封装得不是很好(asio哭诉:你以为我名字中的a是什么?any?)。
CompletionCondition完全没必要由用户来指定。事实上我也不想指定它。我只是想用错误码而不是异常的方式获取错误。但write的六个重载函数中硬是没有一个满足我的要求。哎。