c++ - 关于一般网络编程中的write buffer

标签 c++ networking sockets boost-asio

我正在使用 boost.asio 编写服务器。我已经为每个连接读取和写入缓冲区并使用异步读/写函数(async_write_some/async_read_some)。

有了read buffer和async_read_some,就没有问题了。只需调用 async_read_some 函数就可以了,因为读取缓冲区在读取处理程序中是只读的(通常意味着在同一线程中)。

但是,写入缓冲区需要从多个线程访问,因此需要锁定以进行修改。

第一个问题!

有什么方法可以避免写入缓冲区出现 LOCK 现象吗?

我将自己的数据包写入堆栈缓冲区并将其复制到写入缓冲区。然后调用async_write_some函数发送数据包。这样,如果我连续发送两个数据包,是否可以调用两次async_write_some函数?

第二个问题!

socket编程中常见的异步写法是什么?

感谢阅读。

最佳答案

抱歉,您有两个选择:

  1. 使用锁或更好的方式序列化写入语句 启动一个单独的编写器线程,从中读取请求 一个队列,然后其他线程可以在队列上堆叠请求 没有太多争用的队列(需要一些互斥)。

  2. 给每个写线程它自己的套接字! 如果程序在另一端,这实际上是更好的解决方案 电线可以支持它。

关于c++ - 关于一般网络编程中的write buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237259/

相关文章:

linux - TIME_WAIT 连接太多,得到 "Cannot assign requested address"

c++ - < 没有成员的类的运算符

C++ 宏整数和对象定义

java - 如何使用具有链接本地 ipv6 地址的 Java 或 Scala http 客户端?

python - 使用 Python 将我的 Windows 计算机关联到 wifi AP

c - rt linux中的用户程序如何访问或接收来自内核的数据?

c++ - C++ 中的类成员隐私和 header

C++ 函数模板部分特化?

java - 如何使用 Java 监听接口(interface)/设备上的网络流量?

javascript - Socket.io 使用参数创建空间