Go语言中的多核调度

本文介绍了Go语言如何利用多核优势进行并行计算,重点讲解了Go的M、P、G模型,以及协程的调度策略,包括局部和全局任务队列、IO等待池、线程池和抢占式调度,阐述了Go语言在处理高并发任务时的高效性和公平性。
摘要由CSDN通过智能技术生成

Go语言中的多核调度

浙江大学 14级软件工程 李自乐

 

近年来,随着工业技术的发展,服务器的CPU数量越来越多,动辄几十核心。为了发挥多核的优势,大多数程序都会采用多线程的方式来利用多核。另外,服务器编程一般都涉及较多的IO,包括网络或者外存,同步阻塞的IO对于大多数应用环境是一种很糟糕的方法:

Fd.Read();

这种语句一般在文件读准备完成之后会返回,但是文件的读取(这里的文件包括外存,或者是一个网络设备等)一般受制于硬件原因(硬盘旋转,网络传输),会比较慢。那么如果你的服务是下面这样一条线:

 


那么用户2必须等待用户1的IO读取结束。但是这段时间CPU完全是闲置的。为了利用起来这部分时间,往往会采用开多线程的方法,让这个阻塞的线程继续等待IO,而其他线程又可以使用CPU。操作系统会调度多个线程在多个核心,但是这种调度也是有一些问题的,比如成千上万个线程都要使用CPU,而真实的CPU数量远没有这么多,这样操作系统就不得不在很多个线程之间切换。虽然成千上万的并发任务是无论如何也不可能不需要切换就能完美使用多个CPU了,但是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值