美文网首页Go程序员
MutexOrChannel原文翻译

MutexOrChannel原文翻译

作者: ShutLove | 来源:发表于2018-04-17 16:35 被阅读17次

原文:https://github.com/golang/go/wiki/MutexOrChannel

用sync.Mutex还是channel

go有一句格言是“用通信来共享存储,不要用共享存储来通信”。

即便如此,go还是在sync包中提供了传统的锁机制。而大多数锁的问题都可以通过channel或者传统的lock方式解决。

所以你应该用哪种方式呢?
根据场景,用最富有表达力、最简单的方式。

go新手们常犯的一个错误就是对goroutine和channel的过度使用,仅仅是因为可以这么用或者说用起来更好玩。如果用sync.Mutex能更漂亮的解决你的问题,不要害怕去使用它。go提倡的是务实,即用最适合解决你问题的方法,不要拘泥于某种编码手段。
下面给出一个通用的法则:

channel mutex
传递数据的控制权 缓存
下发任务 状态
传递异步调用结果

当你发现使用mutex规则过于复杂时,也许用channel会更适合。

Wait Group

另一个非常重要的同步手段是sync.WaitGroup。它能使协同工作的一组goroutines共同等待一个阈值事件,之后再继续独立运行。这在以下两种情况下非常有用。

首先,在cleaning up时,它可以让所有goroutine包括main goroutine在clean完成之前,都一起等待。

其次,是当一组各自独立的goroutine共同完成一个循环算法时,让这些goroutines共同等待一个临界事件,然后再次独立执行下去。这个过程可以是被重复执行的,数据在临界事件中可以被交换。这个策略是bsp的基础。

Channel、Mutex、WaitGroup互相补充,是可以被组合使用的。

相关文章

  • MutexOrChannel原文翻译

    原文:https://github.com/golang/go/wiki/MutexOrChannel 用sync...

  • 娑婆(原文翻译)

    前言:写了挺多的佛系文,很多笔友私信反应不是很理解,所以想把我当下写作之时的理解写出来。 原文: 凡生问苍穹...

  • 中庸原文及翻译

    【原文】 天命之谓性,率性之谓道,修道之谓教。道也者,不可须臾离也,可离,非道也。是故君子戒慎乎其所不睹,恐惧乎其...

  • ImportSelector代码原文翻译

  • [译] Android 动画的灵魂—— Interpolator

    原文地址:Timing is Everything 原文作者:Chet Haase 译文出自:掘金翻译计划 (翻译...

  • 项羽本纪》原文及翻译

    《 史记 项羽本纪 原文: 项籍者,下相人也,字羽。初起时,年二十四。其季父项梁,梁父即楚将项燕,为秦将王翦所...

  • 澄语 原文及其翻译

    1. 澄曰:“格列佛往皇宫撒尿,侵犯皇后之人格尊严权也。” 翻译:陈澄说:“格列佛往皇宫撒尿,侵犯了皇后的人格尊严...

  • 《学记》原文和翻译

    《学记》原文和翻译 原文:发虑宪,求善良,足以謏闻,不足以动众;就贤体远,足以动众,未足以化民。君子如欲化民成...

  • D0 原文翻译

    D0 原文翻译 写在前面的话: 首先说说这篇文章的来源,嗯,当然它是来自VOA或者英语阅读,正经脸/它是第六期sc...

  • 20160319 real friends 原文&翻译

    you're my sidekick you're my alibi you're my right-hand m...

网友评论

    本文标题:MutexOrChannel原文翻译

    本文链接:https://www.haomeiwen.com/subject/xucpkftx.html