Go: concurrency pattern
Backlinks (0)
No backlinks found
1 · Go: concurrency pattern#
https://drive.google.com/file/d/1nPdvhB0PutEJzdCq5ms6UI58dp50fcAN/view
两个原则:
- 当你需要并发工作的时候,使用goroutine
- 通过通信共享内存
并发不是并行;并发也不是异步。 并发是一种程序结构,异步(同步)是等待结果(控制流)的方式。
异步回调是实现异步的一种方式,还有:Future/Promis 等
异步的直接作用不是制造并发,而是避免等待时浪费线程。这个特性会帮助程序更容易实现高并发。
1.1 · Future#
不是直接返回结果,而是返回一个代理对象,后续某个点,通过这个代理对象获取(可能阻塞)到结果
- 在 Go 中,通过一个带1容量的缓存的chan:生产者计算出结果后,放入chan,然后结束,消费者通过chan拿到结果
- 调用者调用基于Future的API时,先做准备工作,最后再获取结果;避免导致并发变成线形的(获取结果可能阻塞)
2 · links#
https://drive.google.com/file/d/1nPdvhB0PutEJzdCq5ms6UI58dp50fcAN/view