我正在考虑使用await / async范例重写我的网络库。很多使用该库的代码仍然是同步的,所以我计划将整个库移动到异步模式,然后创建方法存根,这会将异步调用转换为同步调用。
有人能告诉我这是否会让我的同伴使用更糟糕吗? (如果它会消耗更多的CPU,方法调用会花费更长的时间来执行等)?
答案 0 :(得分:6)
它肯定不会更快,同步代码可以更快地响应传入数据。
从异步操作中获得的优势是您的库可以扩展得更好,能够处理更多连接。没有数百个线程只是等待数据到达的副作用。以异步方式执行此操作的缺点是客户端应用程序将更难以使用您的库。这是async / await解决的问题。如果你自己再次同步它没有任何好处,它必须留给客户端应用程序。
答案 1 :(得分:2)
这里的正确答案是对其进行基准测试,尝试使用异步重写几个方法,并查看它们在同步使用时的执行情况。
说this article解释是的,设置异步方法所需的状态是有成本的,所以只有在它有益的情况下才使用它们。对于网络库(大部分时间都花在等待网络上),设置异步的时间成本可能微不足道。
总之,对于网络库来说,它可能很好,但基准测试是唯一方式。
答案 2 :(得分:1)
只有性能损失是async / await正在使用状态机。因此,性能影响就是收益率回报而不是返回数组/列表。