GolangGMP原理(1) 概念梳理 线程 线程一般指内核级线程,核心如下: 操作系统的最小调度单元 创建销毁调度由内核完成,cpu要完成内核态与用户态的转换 可充分利用多核,实现并行 协程 协程线程对应 协程,又称为用户级线程,核心点如下: 与线程存在映射关系,为M:1 创建、销毁、调度在用户态完成,对内核透明,所以更轻 从属同一个内核级线程,无法并行;一个协程阻塞会导致从属同一线程的所有协程无法执行。 Goroutine Goroutine是特殊的协程 与线程存在映射关系,为M:N 创建、销毁、调度在用户态完成,对内核透明,足够轻便 可利用多个线程实现并行 通过调度器实现和线...

  MjaURMIkd5Vr   2023年11月02日   62   0   0 Go

GMP调度场景 场景1 P拥有G1,M1获取P后开始运行G1,G1使用gofunc创建G2,为了局部性G2优先加入到P1的本地队列 场景2 G1运行完成后(函数:goexit),M上运行的goroutine切换为G0,G0负责调度时协程的切换(函数:schedule)。从P的本地队列取G2,从G0切换到G2,并开始运行G2(函数:execute)。实现了线程M1的复用。 场景3 G2在创建G7的时候,发现P1的本地队列已满,需要执行负载均衡(把P1中本地队列中前一半的G,还有新创建G转移到全局队列) 场景4 G2创建G8时,P1的本地队列未满,所以G8会被加入到P1的本地队列。G8加入到P1点...

  MjaURMIkd5Vr   2023年11月02日   39   0   0 Go
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~