清水泥沙

golang基础(40.GO携程实现原理)

GO并发编程原理

GO语言的携程实现称之为goroutine,由GO运行时管理。我们可以在一个处理进程中通过关键字go来启动多个携程,然后在携程中完成不同的子任务。这些用户在代码中穿件和维护的携程本质上是用户级别的线程,GO语言运行时会在底层通过调度器将用户线程交给系统级别的线程处理,如果在运行过程当中遇到某个IO操作暂停运行,调度器会将用户级线程和系统级线程剥离,以便让系统级别的线程去处理其他用户级别的线程。当用户级线程IO操作完成后,调度器又会调用其他空闲的系统级线程对其进行处理。从而达到并发处理多个携程的目的。此外调度器还会在系统级别线程数量不足的时候向操作系统申请创建新的系统级别线程,而在系统线程过多的情况下也会自动销毁一些空闲的系统级线程,实际上这也是很多进程/线程池管理器的工作机制,这样一来,可以保证对系统资源的高效利用,避免系统资源的浪费。