协程一般的使用场景有:
- 开启大量后台运行的任务
- 任务完成后的回调运行, 即异步任务追求同步写法, 比如
result=GetHTTPResult() // 耗时操作 handle(result)
而现实中, 异步编程为了不阻塞当前控制流, 需要引入一些其他的东西, 比如EventLoop/promise/状态机 等概念 写文章的目的是为了(TODO)
- 理清这些异步的语言概念, 编程的可读性/方便程度
- 有哪些实现方式呢? 优劣势?
- 有栈无栈, 会影响我们什么?
- 探讨下他们实现的差别
正文
- 异步运行任务的接口, 比如
- golang的go func()
- OC的dispatch_async()
- java的new Runable{ void run() {任务} }
- java或者Executors.newFixedThreadPool(2).submit(()-> {} )
- 跳转接口/异步写法 对耗时函数异步运行, 运行完后后台进行此函数,接口基本上是: doAsync(运行函数, callbackFunc) 运行函数.then(函数)
- js的fs.writeFile(filename, content, callback: function (err) {}});
- promise.future // 这里引入了promise的概念
- 协作式控制运行
- python的迭代器, next(my_iterator)
- async/await接口
协程API的差别
一般都是
链接
TODO
- 为什么不用线程
- 对比实现: libco, libgo, golang, python,
后记
整理下思路啊,这文章思路没法看