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

时间:2011-11-24 08:58:52

标签: sockets tcp io

如果我有一个四核机器和4个开放和活动套接字,那么有4个线程并行读取这些套接字或者只有一个线程可以迭代地读取套接字?套接字读取操作可以并行执行还是在系统级某处同步?

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

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

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

1 个答案:

答案 0 :(得分:1)

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