|
|
51CTO旗下网站
|
|
移动端

10.2 协程(goroutine)

《Go语言编程入门与实战技巧》第10章并发编程,本章Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为协程(goroutine)时,Go语言会将其视为一个独立的工作单元,这个单元会被调度到可用的逻辑处理器上执行。本节为大家介绍协程(goroutine)。

作者:黄靖钧来源:电子工业出版社|2018-09-23 09:45

10.2  协程(goroutine)

执行体是个抽象的概念,在操作系统层面有多个概念与之对应,比如操作系统自己掌管的进程(process)、进程内的线程(thread)以及进程内的协程(coroutine,也叫轻量级线程)。与传统的系统级线程和进程相比,协程的最大优势在于其"轻量级",可以轻松创建上百万个协程而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万个。这也是协程也叫轻量级线程的原因。

多数语言在语法层面并不直接支持协程,而是通过库的方式支持,但用库的方式支持的功能也并不完整,比如仅仅提供轻量级线程的创建、销毁与切换等能力。如果在这样的轻量级线程中调用一个同步I/O操作,比如网络通信、本地文件读写,都会阻塞其他的并发执行的轻量级线程,从而无法真正达到轻量级线程本身期望达到的目标。

Go语言在语言级别支持轻量级线程,叫goroutine。Go语言标准库提供的所有系统调用操作(当然也包括所有同步I/O操作),都会出让CPU给其他goroutine(创建协程会自动分配一个合适的CPU优先级,不管优先级如何都会与同级协程竞争CPU资源,从外部看来就是出让了部分CPU资源)。这让轻量级线程的切换管理不依赖于系统的线程和进程,也不依赖于CPU的核心数量,而是交给Go语言运行时负责统一调度(当然也允许手动控制)。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java EE 5 开发指南

本书是对Java EE各种技术之间互相协作的概览和补充。 本书还展示了如何编写JavaServer Page(JSP)页面或者企业级JavaBean(EJB):探讨了...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊