2

最近我一直在观察一个有趣的现象,在我基于它重新设计我的整个软件架构之前,我想知道为什么会发生这种情况,以及是否有可能使线程性能与进程性能相提并论。

通常,任务是下载某些数据。如果我们用 6 个线程创建一个进程,基于 Parallel 库,下载大约需要 10 秒。

但是,如果我们创建 6 个进程,每个进程都是单线程的,并下载相同的数据,那么整个过程只需要大约 6 秒。

这些数字经过彻底验证且具有统计意义,因此请务必将其视为理所当然。

观察结果涵盖了一个大型(100 次试验)数据集,我观察到没有偏离这种行为。

基本上,问题是,为什么非同步多线程进程比具有完全相同工作代码的几个单独进程慢,以及如何修复它?

提前致谢!

注意:我读过类似的问题,但答案并不令人满意和实用。

4

1 回答 1

1

我的猜测与 svick 的猜测相同:运行时可能会插入某种瓶颈。

一般来说,您可以使用 Fiddler 或 Wireshark 之类的工具来查看 10 次下载是如何交错的。在您的情况下,我希望任何时候只有两个活动,一旦一个完成,另一个将立即开始。

在你去改变设置之前,你应该明白它为什么在那里。它被写入 HTTP 规范作为建议的客户端行为,以免使服务器不堪重负。如果您的代码要分发到成百上千/百万台机器上,您应该考虑每个客户端同时下载 10 次的影响。

于 2012-06-03T13:57:42.667 回答