【发布时间】:2011-11-24 09:04:52
【问题描述】:
当我在 CouchDB 上运行基准测试时,我注意到即使使用大量的批量插入,并行运行其中一些插入的速度几乎是两倍。我还知道网络浏览器使用许多并行连接来加快页面加载速度。
多个连接比一个快的原因是什么?他们通过同一条线路,甚至到本地主机。
如何确定理想的并行请求数?是否有经验法则,例如“线程池大小 = # cores + 1”?
【问题讨论】:
标签: http networking couchdb
当我在 CouchDB 上运行基准测试时,我注意到即使使用大量的批量插入,并行运行其中一些插入的速度几乎是两倍。我还知道网络浏览器使用许多并行连接来加快页面加载速度。
多个连接比一个快的原因是什么?他们通过同一条线路,甚至到本地主机。
如何确定理想的并行请求数?是否有经验法则,例如“线程池大小 = # cores + 1”?
【问题讨论】:
标签: http networking couchdb
控制因素不是线路本身,毕竟它运行得非常快(忽略路由器延迟),而是每一端的软件开销。必须设置每个物理传输,发送和存储数据,然后在任何事情发生相反的情况之前进行完全处理。因此,每个连接实际上都是同步的,无论它声称在套接字级别是什么:一个异步操作的套接字仍然以同步的方式来回移动数据,因为软件需要同步。
第二个连接可以利用延迟(网络上的死区时间),该延迟是由软件为第一个连接执行其操作而产生的。因此,即使每个连接都是同步的,多个连接也会让事情发生得更快。事情似乎(但当然只是似乎)并行发生。
您可能想查看RFC 2616,HTTP 规范。它将告诉您发生在 HTTP 连接上的交换。
关于最佳并行请求数量我不能说,这是浏览器和服务器之间的问题。
【讨论】:
每个连接都消耗一个自己的线程。每个线程都有一个消耗 CPU、网络和其他资源的量。主要是CPU。
当您启动并行调用时,线程将争用 CPU 时间并“同时”运行事物。
这是对事物的高级概述。我建议您阅读异步调用和线程编程以更好地理解它。
[]的,
过去
【讨论】: