Go语言为什么速度快,几个理由告诉你!

Go语言为什么速度快,相信很多学习者都有这个疑问,几个理由告诉你!

本文将要介绍:

[Go语言为什么速度快,几个理由告诉你!]在本文中,我将介绍 Go 程序如何实现极高的并发性能,以及它的内部调度器实现架构(G-P-M 模型)。我还将逐步解释 Go 如何充分利用计算资源,以及 Go 调度程序如何处理线程:

介绍并发,解释下一篇文章中的相关概念,介绍 Go GPM 模型,描述 Go 调度器处理多线程的案例,引入并发

正文

随着信息技术的飞速发展,单台服务器的处理能力越来越强,迫使编程方式从以前的串行升级到并发。

并发模型包括 IO 多路复用、多进程和多线程。这些模型各有优缺点。现代复杂的高并发架构大多与不同的模型结合使用。在不同的场景中使用不同的模型,扬长避短,达到最大的性能。

多线程由于其轻量级和易用性,已经成为并发编程中最常用的并发模型,包括后派生协程等其他子产品。

并发≠并行

在单个 CPU 内核上,线程通过时间片切换任务或放弃控制,以达到“同时”运行多个任务的目的。它被称为并发。但实际上,任何时候只执行一个任务,其他的都在队列中等待。

多核CPU可以让同一个进程中的“多个线程”同时运行,这就是并行。

进程、线程、协程

进程:进程是系统分配资源的基本单位,具有独立的内存空间。
线程:线程是CPU调度和调度的基本单位。线程依赖于进程的存在,每个线程共享父进程的资源。
协程:协程是用户态的轻量级线程。用户完全控制协程的调度。在协程之间切换只需要保存任务的上下文,而不需要内核的消耗。

线程上下文切换

中断处理、多任务、用户模式切换等原因都会导致CPU从一个线程切换到另一个线程。切换进程需要保存当前进程的状态并恢复另一个进程的状态。

上下文切换的成本很高,因为在内核上交换线程需要很多时间。上下文切换的延迟取决于不同的因素,可能在 50 到 100 纳秒之间。考虑到硬件在每个内核上平均每纳秒执行 12 条指令,那么上下文切换可能需要 600 到 1200 条指令的延迟。事实上,上下文切换占用了程序执行指令的大量时间。

如果有跨核上下文切换,可能会导致CPU缓存失效。 (CPU从高速缓存访​​问数据的成本约为3到40个时钟周期,从主存访问数据的成本约为100到300个时钟周期)。这种场景的切换成本会更高。

Go 为并发而生

自 2009 年正式发布以来,Golang 以其极高的运行速度和高效的开发效率迅速获得了市场份额。 Golang 从语言层面支持并发,使用轻量级协程实现并发程序。

Goroutine 非常轻量级,主要体现在以下两个方面:

上下文切换成本低:Goroutine上下文切换只涉及修改三个寄存器(PC / SP / DX)的值,而比较线程的上下文切换需要包括模式切换(从用户模式切换到内核模式)和16个寄存器,PC,SP等寄存器刷新
内存占用少:线程栈空间一般2M,Goroutine栈空间至少2K;
Go 程序可以轻松支持六位数并发 Goroutine 操作,当线程数达到 1k 时,内存消耗已达到 2G。

因此,学习Go语言,非常有必要!

最好的 Golang 课程和培训

在学习 Golang 的细节时,使用课程来发展和扩展您的技能。

Go和Vue实战课程

本课程是前后端实战课程,可以轻松告诉你如何在前后端使用Go语言

点击学习

Go微服务实战课程

Go语言在这一点非常的不错,因此学习此课程非常有必要

点击学习

用Go构建现代的APP

使用Go语言构建APP

点击学习

声明:本站所有软件、课程、素材等资源全部来源于互联网,从本站下载资源,说明你已同意本条款。如若本站内容侵犯了原著者的合法权益,请携带版权证明与我们联系,我们会及时处理。
THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录