阻塞代码是一种有泄漏的抽象

主要观点:

  • 异步代码(async)无需整个代码都为异步,而阻塞代码(blocking)则不同。
  • 很多人认为async是“泄漏的抽象”,但作者认为非async代码(阻塞代码)才是真正的泄漏抽象。
  • 可以从阻塞代码中调用async代码,只需使用block_on等函数;但对于依赖tokioasync代码,需先启动tokio运行时。
  • 相比阻塞代码,async代码更可预测,使用阻塞代码时需特别小心,可能需要将其封装在Future中运行在单独线程。

关键信息和重要细节:

  • async代码虽有一些学习成本,但能提供优雅的编程模型,很多程序因人们对其恐惧而未使用。
  • 常见的async库依赖tokio等重量级 crate,且语言特性需进一步完善。
  • 从阻塞代码调用async代码时,block_on函数可将async函数转换为同步调用,pollster库也可实现类似功能。
  • 对于依赖tokioasync代码,需在main()中启动tokio运行时,并在使用tokio原语的新线程中调用enter()
  • 阻塞代码的函数签名无法直接表明其运行时间和是否会阻塞,使用时需小心,可能需要封装在Future中运行在单独线程。
  • 提出一些可能的解决async代码泄漏问题的方法,如函数文档中注明是否阻塞等,但都存在困难。
阅读 10
0 条评论