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