美文网首页go学习
golang技术笔记之goroutine

golang技术笔记之goroutine

作者: 知本集 | 来源:发表于2018-01-03 10:59 被阅读9次

    进程、线程和协程:

    1.进程:分配完整独立的地址空间,拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程的切换只发生在内核态,由操作系统调度。

    2.线程:和其它本进程的线程共享地址空间,拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程的切换一般也由操作系统调度(标准线程是的)。

    3.协程:和线程类似,共享堆,不共享栈,协程的切换一般由程序员在代码中显式控制。

    一般来说,如果没有显式的让出CPU,就会一直执行当前协程。

    goroutine可以看作是协程的go语言实现;

    浅析goroutine:

    它的调度一定程度上是由go运行时(runtime)管理。其好处之一是,当某goroutine发生阻塞时(例如同步IO操作等),会自动出让CPU给其它goroutine。

    goroutine的使用非常简单,例如foo是一个函数:

    go foo()

    就一个关键字go搞定了,这里会启动一个goroutine执行foo函数,然后CPU继续执行后面的代码。

    goroutine是非常轻量级的,它就是一段代码,一个函数入口,以及在堆上为其分配的一个堆栈(初始大小为4K,会随着程序的执行自动增长删除)。所以它非常廉价,我们可以很轻松的创建上万个goroutine。

    相关文章

      网友评论

        本文标题:golang技术笔记之goroutine

        本文链接:https://www.haomeiwen.com/subject/xiycixtx.html