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

Golang基础知识的基本同步(1)

时间:2023-03-07 00:52:01 网络应用技术

  大家好,今天,我将整理GO语言的内容并分享知识的内容并与所有人分享。请建议,谢谢。

  GO已根据对同步基础的内存访问构建了一组新的并发基础,并为用户提供了扩展的内容。GOSync标准库主要包含低级别内存访问同步的最有用的并行原始。内存访问同时使用的主要使用的语言,这些类型是一个不错的选择。

  WaitGroup可以被视为安全的并发表:呼叫增加计数,减少呼叫计数。呼叫将阻止并等待计数器返回零。

  请注意,呼叫已在Goroutine之外完成。如果我们不这样做,我们将引入数据竞争条件,因为我们不保证Goroutine的任何调度顺序;我们可能会在任何Goroutine启动之前触发电话。如果将呼叫放置在Goroutine的关闭中,则可能不会完全阻止呼叫,因为它没有执行。

  在正常情况下,它几乎是与Goroutine配对的,要尽可能地跟踪,但有时会被称为一个时间来跟踪一组Goroutine。

  我已经在上一篇文章中简要介绍了类型,您可以参考Golang Foundation(3)文章的知识。

  Mutex易于理解,代表“相互排斥”。MUTUALITICE提供了一种独有的方法来解释对共享资源访问的访问。

  它可以理解为代码块中的关键区域,只能同时由goroutine操作。

  方法:锁

  方法:尝试锁定和报告(很少使用)

  方法:解锁

  示例:两个goroutine,他们试图提高和降低一个公共价值,并使用Mutex同时访问它。

  在这里,计数变量受相互锁定的保护

  输出

  在这里,由于Goroutine调度机制,在每个人的设备编码之后,结果将发生变化。

  请注意,锁定部分是该程序的性能瓶颈,进入和退出锁的成本有点高,因此通常使所涉及的范围最小化。

  储物柜接口定义了锁定和解锁的方法。

  阅读和写作相互锁,锁可以通过任何数量的读取或单个写作持有。零值是解锁的静音。

  相同的与:它保护对内存的访问;但是,rwmutex可以为您提供更多的控制方法。您可以要求锁定阅读。在这种情况下,除非写锁,否则您将获得阅读权限。这意味着,只要没有其他事情可以进行和写作操作,任何数量的读者就可以执行阅读操作。

  通用服务的阅读和写作将很高。如果大多数请求是读取请求,它们不会互相影响,那么资源的操作可以分开和编写。对于此类考虑,您可以使用rwmutex。

  在阅读和写作锁的控制下进行多次写作操作是相互排斥的,并且写作操作和阅读操作也相互排斥。但是,多次阅读操作之间没有相互关系。阅读和写作锁可以大大降低由使用锁,完成共享资源的访问控制。

  方法:用来写的锁;如果锁定锁定用于阅读或写作,则锁定始终锁定,直到可用。

  方法:用于阅读的锁;它不用于递归阅读锁;预防锁定将阻止新阅读获得锁。

  方法:Rlocker返回一个使用RW来实现锁定和解锁方法的储物柜接口。

  方法:runlock撤销rlock调用;它不会影响您同时阅读的Goroutine。如果输入Runlock时未锁定RW,则是运行时错误。

  方法:Trylock试图锁定RW来编写并报告是否成功。(很少使用)

  方法:TryRlock试图锁定RW以进行阅读和报告是否成功。(很少使用)

  方法:解锁RW用于写作。如果RW未锁定写入解锁条目,则是运行时错误。

  像Mutex一样,RWMutex的相互排除与特定的goroutine无关。一个goroutine可以锁定(锁定),然后安排另一个goroutine以运行锁(解锁)。

  示例:阅读和写作锁

  输出

  您可以在此示例中看到,以查看相对于大级别的性能优势。建议以逻辑上的方式使用它。

  输出

  技术文章继续进行更新,请更多注意~~

  搜索微信公共帐户,关注我[Moer Mountain Gunner]

  参考

  [1]“ GO并发编程实际战斗”书

  [2]“ Go中的并发”书

  [3] https://pkg.go.dev/sync同步标准库

  原始:https://juejin.cn/post/7097902611017236488