【问题标题】:Synchronous and parallel web requests, both receives B bytes per second同步和并行 Web 请求,均每秒接收 B 字节
【发布时间】:2013-06-22 20:39:23
【问题描述】:

给定一组同步 Web 请求,按顺序执行 - 完成 Web 请求需要 N 秒,每秒接收 B 字节。然而,做同样的事情,但使用异步 Web 请求,这使得并行执行所有 Web 请求成为可能 - 它不再需要 N 秒,但它仍将每秒接收 B 字节。

运行一个包含 12 个 Web 请求的简单测试 - 同时使用同步和并行方法,确认它们都每秒接收 B 字节(使用 Resource Monitor)。

因此,我的问题是......并行执行 Web 请求的方法是否应该每秒接收不超过 B 字节,以弥补它比同步方法更快? - 否则,同步方法将运行更长时间,并且比并行方法接收更多字节(总计)。

【问题讨论】:

  • 这是如何实现的?为什么你说同步方法会收到更多的字节总数?如果您执行相同的请求(假设服务器返回相同的数据),无论您如何获取它们,您的响应都应该是相同的。在幕后,所有网络请求都是异步的,如果您提出要求,框架只会隐藏复杂性。
  • @xxbbcc,假设一个应用程序发出同步 Web 请求,需要 40 秒来处理它们并获取它们的响应。在这 40 秒内,Resource Monitor 显示它接收到 500 Kbps。对发出异步 Web 请求并在 5 秒内完成的应用程序执行相同操作,Resource Monitor 显示它也接收 500 Kbps。 - 计算接收的总字节数:Sync(40sec * 500 Kbps) |异步(5 秒 * 500 Kbps)。从我的角度来看,这意味着同步版本收到的字节数比异步版本多。
  • 异步和并行之间有一个的区别。如果您的异步请求都在同一个线程中运行,它们将按顺序运行,无论如何。
  • @jpaugh,Touché。在我之前的评论中将“异步”替换为“并行异步”。
  • @ebb 您应该使用 Fiddler 来测量接收到的实际字节数。我不知道 500 kbs 的测量值有多准确,但如果您的服务器对给定请求返回相同的响应,那么无论您如何获得它,大小都应该是相同的。

标签: c# networking asynchronous


【解决方案1】:

这些请求不会在您的机器上处理(除非连接到本地主机)。这意味着要完全处理每个请求,您的机器必须等待响应。

考虑向朋友 #1 发送生日聚会邀请,并在收到回复后,将邀请发送给朋友 #2,等等。将邀请发送给所有朋友,然后等待所有朋友回复会更快。特别是如果朋友 ​​#1 恰好在度假。

我不知道为什么每秒的字节数是一样的,可能是网络中的某个节点限制了速度,但是并行的方式至少可以发出每个请求,并“并行”出总的等待时间。

我不明白同步性如何影响接收到的字节总数。您说的是字节/秒,而不是在该传输速度下花费的秒数。

【讨论】:

  • 我真的想不出任何可能限制速度的东西。除此之外,我还提到了同步性,因为我觉得奇怪的是,同步方法似乎会比并行异步方法接收更多的字节(它需要更长的时间,并且每秒接收相同的字节数)。
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 2019-05-13
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多