【问题标题】:Are socket operations performed in parallel at the system level?套接字操作是否在系统级别并行执行?
【发布时间】:2012-01-05 11:09:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sockets tcp io


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 2021-11-12
      • 2012-06-09
      • 1970-01-01
      • 2014-11-30
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      相关资源
      最近更新 更多