当前位置: 首页 > 网络应用技术

进行并发编程:Goroutine,频道和同步详细说明

时间:2023-03-08 02:22:00 网络应用技术

  优雅的并发编程范式,完美的并发支持,出色的并发性能是与其他语言不同的主要功能。

  在当今的多核时代,并发编程的含义是自我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

  作者:扬兹