最近刚开始学go
,在读许式伟的《go
语言编程》时看到对并发编程的介绍:
通过在函数调用前使用关键字 go,我们即可让该函数以 goroutine 方式执行。goroutine 是一种 比线程更加轻盈、更省资源的协程。Go 语言通过系统的线程来多路派遣这些函数的执行,使得 每个用 go 关键字执行的函数可以运行成为一个单位协程。当一个协程阻塞的时候,调度器就会自 动把其他协程安排到另外的线程中去执行,从而实现了程序无等待并行化运行。而且调度的开销 非常小,一颗 CPU 调度的规模不下于每秒百万次,这使得我们能够创建大量的 goroutine,从而可 以很轻松地编写高并发程序,达到我们想要的目的。
所以说,go
的协程本质上还是系统的线程调用,而Python
中的协程是eventloop
模型实现,所以虽然都叫协程,但并不是一个东西,那么为什么都要叫协程?
1
innoink 2018-11-21 01:24:39 +08:00 via Android
goroutine 是 m:n 的线程调度器
|