Jam*_*Jam 0 rust async-await rust-async-std
我试图了解何时使用异步以及何时可以提高性能。
\n我知道它 \xe2\x80\x99s 在替换其他阻塞 IO 操作(如文件 IO、http 调用、数据库操作等)方面最强大,但我想知道除此之外是否有 \xe2\x80\x99s 任何点(在至少就性能而言)。
\n一个具体的例子可能是大内存副本(移动大向量或以其他方式复制大量数据)。这是一个同步操作,就程序的其余部分而言可能需要一段时间。这个示例是否可以利用 async/await 在等待副本时执行其他操作,或者线程必须等待内存副本才能继续执行?
\n如果不是这个直接的例子,也许另一个可以通过 async/await 改进的同步操作?
\nAsync/await 不提供任何并行性,只提供并发性。这意味着任何使用 async/await 来划分工作的同步操作只会一部分接着另一部分地运行,并不比没有 async/await 快,而且实际上更慢,因为它增加了开销。
您只能通过线程获得并行性,并且系统中的核心数量受到限制。
一些异步运行时确实使用多个线程并行运行代码,因此如果您正确使用它们,您将获得一些并行性(因此速度);但这只会增加直接使用线程或使用rayon
避免异步/等待并仅使用线程并行化代码之类的库的开销。
如果您不受 I/O 限制,请不要使用 async/await。你没有什么可得到的。