如果我有一台四核机器和 4 个开放和事件的套接字,是让 4 个线程并行读取这些套接字更快,还是只有一个线程迭代读取套接字更快?套接字读取操作可以并行执行还是在系统级别的某个地方同步?
类似地,如果我有 4 个需要写入一些数据的套接字,那么让 4 个线程同时写入这些套接字会更快,还是让一个线程完成所有写入会更好?
似乎多核应该能够实现更高的吞吐量(当然如果网络带宽不是瓶颈),但是我想知道是否是这样,因为毕竟最后只有一根以太网线(或其他介质),所以在某些时候,所有这些写入无论如何都必须同步,并且数据包将按顺序发送......
具体来说,如果我有一台机器运行 n 个线程,这些线程生成需要发送到另一台机器的请求,打开 n 个套接字并让每个线程写入它是否更好?还是同步所有线程并通过单个套接字发送所有数据更好? 在接收端,最好有一个套接字来读取数据吗?还是并行读取 n 个套接字更好?如果无论如何都需要同步所有阅读器怎么办?
最佳答案
套接字操作在很大程度上与应用程序是异步的;缓冲的;而且,如果幸运的话,在内核中并发:要同步的唯一重要状态是每个连接。然而,决定速率的步骤实际上是网络带宽,即使只有一个线程也很容易使带宽饱和。 Web 浏览器通常为每个网页打开 4 到 8 个线程来获取 HTML 本身和图像等。
关于sockets - 套接字操作是否在系统级并行执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254381/