【发布时间】: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