gpt4 book ai didi

c++ - 处理一个套接字和多个线程时异步 IO 的用例

转载 作者:行者123 更新时间:2023-11-30 05:31:22 25 4
gpt4 key购买 nike

我很难理解为什么有些程序员在只有一个套接字时推荐异步 IO,例如 UDP 的常见情况。这更针对 ASIO,它是我们将在 C++17 中获得的基础,但通常适用于任何异步库。

有没有有意义的用例?我看不出性能会比两个线程更好,一个在读取时阻塞(然后为线程池排队数据包),另一个在写入时阻塞,条件变量等待数据包发送。最好在那里使用多数据包功能以避免操作系统开销。

管道中有什么可以帮助 ASIO 中 UDP 或单套接字 TCP 的效率吗?几乎所有的 ASIO 示例都显示了同步读写。也就是说,您只在最后一个处理程序中进行另一次读取或写入。因此,每个套接字几乎没有什么好处,如果只处理一个套接字,那么对于这些​​示例来说,没有什么比专用的接收和写入线程更好的了。

我是不是漏掉了什么?

最佳答案

一般来说,ASIO 可能产生比多线程更差的性能。有了真正的多线程和多核(如今的标准),您将有机会同时为两个客户端提供服务(单线程 ASIO 模型永远不会发生这种情况)。但是,例如,如果您的任务是 IO 绑定(bind)的,使用具有同步访问的公共(public)资源(例如,单线程数据库)或受任何其他锁的约束,那么多线程的任何好处都将消失。

另一方面,ASIO 模型要简单得多,不需要任何同步,允许在单线程模式下编译程序(因此,例如,提高内存分配的性能,消除对原子访问的需要, ETC)。在许多情况下,这些好处超过了缺点。

关于c++ - 处理一个套接字和多个线程时异步 IO 的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35579353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com