Go语言协程调度原理,协程为什么快

Go语言协程调度原理,协程为什么快!

前言:

​ Go面试技术点。用于记录学习复习总结!

goroutine的理解:

​ 是一种轻量级的用户态线程(可以避免用户态到核心态的切换,节省资源开销),由Go运行时调度器进行管理!在Go中,每一格协程都会被分配一个较小的栈空间(默认为2KB),并以非常低的成本创建和销毁。

Goroutine的运行时:

​ Go运行时调度器采用了M:N的模型,也就是在M个操作系统线程上运行N个协程。具体来说,Go运行时初始化了一个或多个GOMAXPROCS指定数量的操作系统线程,并在这些线程上运行协程。
在这里插入图片描述
​ 【M(左):N(中)模型图】

当一个协程阻塞时,调度器会自动将其与当前协程解除绑定,并将其转移到等待队列中,然后运行其它的协程,从而实现了高效地利用了CPU的时间片

Go中协程的优势:

​ 协程不像传统多线程编程那样必须避免线程竞争和加锁解锁等操作。事实上,在Go中通常通过channel实现协程之间的同步和通信。Go的channel机制提供了一种非常有效且安全的协程同步方式,可以避免竞争条件和死锁等问题。同时,协程可以自我调节、自我管理,从而可以避免了频繁的线程切换带来的性能损耗。这使得协程同游非常快的相应速度和高效的并发处理能力。

​ 总而言之:Go 的协程是一种轻量级、高效率的并发编程方式,得益于其独特的调度机制和 channel 通信机制,可以有效地利用 CPU 时间片,并具有比传统多线程编程更加安全和高效的优点。

比传统多线程编程更加安全和高效的优点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值