协程

80 阅读1分钟

协程一般的使用场景有:

  1. 开启大量后台运行的任务
  2. 任务完成后的回调运行, 即异步任务追求同步写法, 比如 result=GetHTTPResult() // 耗时操作 handle(result)
    而现实中, 异步编程为了不阻塞当前控制流, 需要引入一些其他的东西, 比如EventLoop/promise/状态机 等概念 写文章的目的是为了(TODO)
  • 理清这些异步的语言概念, 编程的可读性/方便程度
  • 有哪些实现方式呢? 优劣势?
  • 有栈无栈, 会影响我们什么?
  • 探讨下他们实现的差别

正文

  1. 异步运行任务的接口, 比如
  • golang的go func()
  • OC的dispatch_async()
  • java的new Runable{ void run() {任务} }
  • java或者Executors.newFixedThreadPool(2).submit(()-> {} )
  1. 跳转接口/异步写法 对耗时函数异步运行, 运行完后后台进行此函数,接口基本上是: doAsync(运行函数, callbackFunc) 运行函数.then(函数)
  • js的fs.writeFile(filename, content, callback: function (err) {}});
  • promise.future // 这里引入了promise的概念
  1. 协作式控制运行
  • python的迭代器, next(my_iterator)
  • async/await接口

协程API的差别

一般都是

链接

TODO

  • 为什么不用线程
  • 对比实现: libco, libgo, golang, python,

后记

整理下思路啊,这文章思路没法看