Loveit 内容组织
了解如何在 LoveIt 主题中快速, 直观地创建和组织内容.
了解如何在 LoveIt 主题中快速, 直观地创建和组织内容.
Hugo 提供了多个内置的 Shortcodes, 以方便作者保持 Markdown 内容的整洁.
Go 语言提供了一些并发调试工具,这些工具可以帮我们有效的发现并发编程中的 bug
Go race detector可以帮助我们自动发现程序有没有数据竞争(data race),它是基于 Google 的 C/C++ sanitizers 技术实现的,编译器通过探测所有的内存访问,加入代码能监视对这些内存地址的访问(读还是写)。在代码运行的时候,race detector 就能监控到对共享变量的非同步访问,出现 race 时,就会打印出警告信息。
etcd 通过 github.com/coreos/etcd/contrib/recipes 包提供了分布式队列这种数据结构。其类型和方法的签名如下:
|
|
需要注意的是,如果这个分布式队列当前为空,调用 Dequeue 方法的话,会被阻塞,直到有元素可以出队才返回。
在前面的课程里,我们学习的并发原语都是在进程内使用的,即一个运行程序为了控制共享资源、实现任务编排和进行消息传递而提供的控制类型。布式的并发原语实现更加复杂,因为在分布式环境中,网络不可靠、时钟不一致、以及不可预测的程序暂停,使得节点之间的通信相对于内存具有非常的不确定性。不过还好有相应的软件系统去做这些事情。这些软件系统会专门去处理这些节点之间的协调和异常情况,并且保证数据的一致性。我们要做的就是在它们的基础上实现我们的业务。etcd 就提供了非常好的分布式并发原语,比如分布式互斥锁、分布式读写锁、Leader 选举,等等。所以,今天,我就以 etcd 为基础,给你介绍几种分布式并发原语。
共享资源保护、任务编排和消息传递是 Go 并发编程中常见的场景,而分组执行一批相同的或类似的任务则是任务编排中一类情形,本节我们来介绍一下分组编排的一些常见场景和并发原语,包括: