使用wait/async是否会降低性能
本文关键字:性能 是否 wait async 使用 | 更新日期: 2023-09-27 18:29:13
我正在考虑用wait/async范式重写我的网络库。许多使用该库的代码仍然是同步的,所以我计划将整个库移到异步模式,然后创建方法存根,将异步调用转换为同步调用。
有人能告诉我这是否会使我的库在同步使用方面变得更糟吗?(比如,如果它会消耗更多的cpu,那么方法调用将需要更长的时间来执行等等)?
它肯定不会更快,同步代码可以更快地响应传入数据。
异步操作的好处是,您的库可以更好地扩展,能够处理更多的连接。没有数百个线程除了等待数据到达之外什么都不做的副作用。异步操作的缺点是,客户端应用程序将更难使用库。这就是async/await解决的问题。如果你自己让它再次同步,那就没有任何好处,它必须留给客户端应用程序。
这里的正确答案是对其进行基准测试,尝试用async重写几个方法,并查看它们在同步使用时的执行情况。
尽管如此,本文解释说,是的,设置异步方法所需的状态是有成本的,因此只有在有益的情况下才使用它们。对于网络库(您的绝大多数时间可能都花在等待网络上),设置异步的时间成本可能可以忽略不计。
总之,对于网络库来说,这可能很好,但基准测试是唯一的方法。
唯一的性能惩罚是async/await正在使用状态机。所以性能影响是比如yield return,而不是返回数组/列表。