go协程与php协程:Swoole协程与Go协程的区别
go协程与php协程:Swoole协程与Go协程的区别goroutine 是通过 GPM 调度模型实现的。M: 表示内核级线程,一个 M 就是一个线程,goroutine 跑在 M 之上的。G: 表示一个 goroutine,它有自己的栈。P: 全称是 Processor,处理器。它主要用来执行 goroutine 的,同时它也维护了一个 goroutine 队列。Go 在 runtime、系统调用等多个方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或进行系统调用时,会主动把当前协程的 CPU 转让出去,让其他协程调度执行。背景:
进程、线程、协程的概念- 进程是什么?
进程就是应用程序的启动实例。
例如:打开一个软件,就是开启了一个进程。
进程拥有代码和打开的文件资源,数据资源,独立的内存空间。
- 线程是什么?
线程属于进程,是程序的执行者。
一个进程至少包含一个主线程,也可以有更多的子线程。
线程有两种调度策略,一是:分时调度,二是:抢占式调度。
- 协程是什么?
协程是轻量级线程 协程的创建、切换、挂起、销毁全部为内存操作,消耗是非常低的。
协程是属于线程,协程是在线程里执行的。
协程的调度是用户手动切换的,所以又叫用户空间线程。
协程的调度策略是:协作式调度。
- Swoole 的协程客户端必须在协程的上下文环境中使用。
- Swoole 的协程是基于单线程的 无法利用多核CPU,同一时间只有一个在调度。
- Swoole 协程使用示例及详解
goroutine 是轻量级的线程,Go 语言从语言层面就支持原生协程。
Go 协程与线程相比,开销非常小。
Go 协程的堆栈开销只用2KB,它可以根据程序的需要增大和缩小,
而线程必须指定堆栈的大小,并且堆栈的大小都是固定的。
goroutine 是通过 GPM 调度模型实现的。
M: 表示内核级线程,一个 M 就是一个线程,goroutine 跑在 M 之上的。
G: 表示一个 goroutine,它有自己的栈。
P: 全称是 Processor,处理器。它主要用来执行 goroutine 的,同时它也维护了一个 goroutine 队列。
Go 在 runtime、系统调用等多个方面对 goroutine 调度进行了封装和处理,当遇到长时间执行或进行系统调用时,
会主动把当前协程的 CPU 转让出去,让其他协程调度执行。
- Go 语言原生层面就支持协层,不需要声明协程环境。
- Go 协程是基于多线程的,可以利用多核 CPU,同一时间可能会有多个协程在执行。
- go 协程使用示例及详解
背景: