sockets - 套接字操作是否在系统级并行执行?

标签 sockets tcp io

如果我有一台四核机器和 4 个开放和事件的套接字,是让 4 个线程并行读取这些套接字更快,还是只有一个线程迭代读取套接字更快?套接字读取操作可以并行执行还是在系统级别的某个地方同步?

类似地,如果我有 4 个需要写入一些数据的套接字,那么让 4 个线程同时写入这些套接字会更快,还是让一个线程完成所有写入会更好?

似乎多核应该能够实现更高的吞吐量(当然如果网络带宽不是瓶颈),但是我想知道是否是这样,因为毕竟最后只有一根以太网线(或其他介质),所以在某些时候,所有这些写入无论如何都必须同步,并且数据包将按顺序发送......

具体来说,如果我有一台机器运行 n 个线程,这些线程生成需要发送到另一台机器的请求,打开 n 个套接字并让每个线程写入它是否更好?还是同步所有线程并通过单个套接字发送所有数据更好? 在接收端,最好有一个套接字来读取数据吗?还是并行读取 n 个套接字更好?如果无论如何都需要同步所有阅读器怎么办?

最佳答案

套接字操作在很大程度上与应用程序是异步的;缓冲的;而且,如果幸运的话,在内核中并发:要同步的唯一重要状态是每个连接。然而,决定速率的步骤实际上是网络带宽,即使只有一个线程也很容易使带宽饱和。 Web 浏览器通常为每个网页打开 4 到 8 个线程来获取 HTML 本身和图像等。

关于sockets - 套接字操作是否在系统级并行执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254381/

相关文章:

java - 启用 java 安全管理器限制 udp 套接字数

python - 连接到服务器的客户端IP

map - 你如何将 TCP 连接对象传递给其他 Go 模块?

java - 在单个 nio 选择器中并行写入/读取

java - 替代文件锁定以确保只能启动一个应用程序实例

c - openSSL:如何创建 CA 文件

java - ChannelInboundHandlerAdapter writeAndFlush(msg)方法在刷新后是否释放msg?

安卓 6 : file/proc/sys/net/ipv4/tcp_fastopen

java - 替换文本后如何保持文档文件内容相同的格式

node.js - RabbitMQ 与重新连接