优雅的并发编程范式,完美的并发支持,出色的并发性能是与其他语言不同的主要功能。
在当今的多核时代,并发编程的含义是自我evendides。该语言级别为启动Coroutines提供了关键字,并且可以在同一台计算机上启动数千个Coroutines。
让我们在下面详细介绍它。
GO语言的并发执行称为Goroutine,并用关键字激活Goroutine。
关键字必须遵循一个函数,该功能可以是著名的函数或未知功能。函数的返回值将被忽略。
执行是非封锁的。
让我们首先看一个示例:
从执行结果的角度来看,成功计算了斐波那契报价的值,表明该程序没有被阻止,并且该函数一直在屏幕上打印提示字符,表明该程序已执行。
计算斐波那契数的值时,功能打印结果和退出,然后撤回。
让我们看一个例子。
有问题,屏幕上没有什么,为什么?
这取决于GO程序的执行机制。程序启动时,只有一个goroutine可以调用该函数,称为主goroutine。新的goroutine是通过关键字创建的,然后同时执行。当功能返回时,它将不要等待其他goroutine被执行,而要结束所有goroutine直接暴力。
有什么方法可以解决吗?当然,请低头。
通常,在编写多个进程时,您会遇到一个问题:Inter -Process Communication.Common通信方法包括信号,共享内存等。Goroutine之间的通信机制是频道频道。
使用创建频道:
该频道支持三个主要操作:和。
没有缓冲通道函数接受两个参数。第二个参数是可选的参数,指示通道容量。没有传递或传递0表示创建了否延迟通道。
NO -Buffer通道上的发送操作将阻止,直到另一个Goroutine在相应的频道上执行接收操作。标准,如果您先收到它,则接收Goroutine将阻止,直到另一个Goroutine在相应的通道上执行发送的发送。
因此,没有缓冲通道是同步通道。
在下面,我们使用无缓冲通道来解决上述示例中的问题。
可以正常输出结果。
Goroutine勋爵将阻止,直到读取频道中的值,该程序继续执行,最后退出。
CAP频道创建一个容量为5的缓冲通道:
缓冲通道的发送操作被插入通道末端的元素中,并从通道的头部删除接收操作。如果通道已满,则发送将阻塞直到接受另一个Goroutine。如果通道为空,则接收将阻止,直到执行另一个高鲁丁为止。
您是否觉得实际上,缓冲频道和队列已经取消了操作。
一个通道类型是只能发送的通道,该类型是只能接收的通道。
任何两个通道都可以用作一条通道,但不能依次使用。
要注意的另一件事是,它只能在发送频道上使用。如果在接收通道中使用它,将报告错误。
查看一个频道的示例:
同步软件包提供了两种类型的锁定类型:前者是互斥的锁,后者是读写锁。
当获得goroutine时,其他goroutine只能等到锁释放为止。
经典的单读多阅读模型。当读取锁被占据时,它将停止写作,但不要停止阅读。写作锁将阻止写作和阅读。
编辑程序是GO的特征,也是核心功能之一。实际上,涉及的知识点很多。本文仅在砖块中发挥作用。
本文开始介绍Goroutine的简单用法,然后引导该频道的概念。
有三种类型的渠道:
最后,引入了GO中的锁定机构,该机构是(共同锁)和(读写锁)由Sync软件包提供。
goroutine非常深刻,后面的坑必须慢慢踩踏。
文章中的大脑图和源代码已上传到GitHub,需要它的学生可以下载。
地址:github.com/yongxinz/gopher/tree/main/sc
作者:扬兹