Go语言学习——并发

一、 实现并发的模型:
a) 多进程,基于操作系统,开销比较大(内核管理进程压力大),但是实现简单,进程互不影响。1:1的
b) 多线程,基于系统层面的,使用的是一种叫做轻进程的系统线程模型实现的,虽然可以给你线程优先级,但实际调用,仍然掌握在系统内核手中,而且需要在用户态和内核态之间来回切换,开销依然是比较大的。进程与线程比是1:N,但与内核线程的比为1:1
c) 基于回调的非阻塞型/异步I/O:是多线程的一种补充,通过事件驱动的方式,异步处理。尽量少的使用线程,这种虽然开销降低,但是编程极为复杂,而且不适合进行计算类逻辑的实现。
d) 协程:基于用户态线程实现,与系统的内核线程无关,只在必要时与进程及系统内核交互。这种优点明显,系统开销小,编程简单,结构清晰。缺点也是比较清楚,因为没有内核线程的参与,线程的操作及处理器分配,均需要相应的语言实现,特别是在如何映射到其他处理器上。
e) 混合多线程,指的是用户线程和内核线程混合使用的方式,用户操作依然通过用户态线程操作,而内核线程作为一种桥梁,实现用户线程与内核资源及处理器资源的映射分配。
二、 Goroutine,是go语言的多线程实现,从最初应该只是基于协程做的,后面应该会慢慢向混合多线程发展,充分利用处理器资源,达到M:N的模型。
Go语言学习——并发
Go语言学习——并发