Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ asio异步性能_C++_Boost_Asynchronous - Fatal编程技术网

C++ asio异步性能

C++ asio异步性能,c++,boost,asynchronous,C++,Boost,Asynchronous,我使用boost::asio和异步方法开发了一个TCP网络应用程序。应用程序通过以下方式发送大约1GB的数据: 发送一个5字节的命令(使用async_write()) 发送1024字节的数据(使用另一个async_write()) 重复此操作,直到发送完所有1GB数据 当我使用同步方法时,性能是预期的(使用1GB以太网发送1GB数据大约需要9秒),但当我使用异步调用时,性能会下降,发送相同数量的数据需要20秒 我曾尝试停用Nagle的算法,但它没有解决问题 您知道对少量数据使用几个async

我使用boost::asio和异步方法开发了一个TCP网络应用程序。应用程序通过以下方式发送大约1GB的数据:

  • 发送一个5字节的命令(使用async_write())
  • 发送1024字节的数据(使用另一个async_write())
  • 重复此操作,直到发送完所有1GB数据
当我使用同步方法时,性能是预期的(使用1GB以太网发送1GB数据大约需要9秒),但当我使用异步调用时,性能会下降,发送相同数量的数据需要20秒

我曾尝试停用Nagle的算法,但它没有解决问题

您知道对少量数据使用几个async_write()调用是否会对性能产生负面影响吗


谢谢

请尝试使用更大(32-64k)的数据包大小。@Wilbert,因此您同意我的观点,即对少量数据使用异步操作会降低性能。可悲的是,我不能减少数据包大小(这是接收器设计强加给我的)@lezo packet size?您使用TCP还是UDP?@lezo当您使用TCP时,有流,没有数据包。所以你们可以一次发送更多的数据,和接收器的设计无关。@lezo你们不明白我的意思。TCP本身已经是一个流。所以一次发送一个数据包并不意味着接收者每次只收到一个数据包。接收者绝对不应该依赖于此。可能一次发送整个1GB文件不是一个好主意,但尝试一次发送多个“数据包”。威尔伯特建议使用32-64k,因此在一次呼叫中发送32-64个数据包。量。多试试。直到它不再影响速度并且仍然是合理的。