协程杂谈

146 阅读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(()-> {} ) 

2. 跳转接口/异步写法 对耗时函数异步运行, 运行完后后台进行此函数,接口基本上是: doAsync(运行函数, callbackFunc) 运行函数.then(函数) 

  • - js的fs.writeFile(filename, content, callback: function (err) {}}); 
  • - promise.future // 这里引入了promise的概念 

 3. 协作式控制运行 

  •  - python的迭代器, next(my_iterator) 
  • - async/await接口 

 协程API的差别

 一般都是 

链接 

 TODO 

  • 为什么不用线程
  •  对比实现: libco, libgo, golang, python, 
  •  用库实现协程和语言嵌入有什么区别 # 后记 整理下思路啊,这文章思路没法看