个人简介

Echo Blog


江湖无名 安心练剑
  • Go语言核心36讲-34并发安全字典sync.Map(上)
    34 并发安全字典sync.Map (上) 在前面,我几乎已经把Go语言自带的同步工具全盘托出了。你是否已经听懂了会用了呢? 无论怎样,我都希望你能够多多练习、多多使用。它们和Go语言独有的并发编程方式并不冲突,相反,配合起来使用,绝对能达到“一加一大于二”的效果。 当然了,至于怎样配合就是一门学问了。我在前面已经讲了不少的方法和技巧,不过,更多的东西可能就需要你在实践中逐渐领悟和总结了...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-33临时对象池sync.Pool
    33 临时对象池sync.Pool 到目前为止,我们已经一起学习了Go语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁、读写锁、条件变量和原子操作,以及Go语言特有的几个同步工具: sync/atomic.Value ; sync.Once ; sync.WaitGroup context.Context 。 今天,我们来讲Go语言标准库中的另一个同步工具:...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-32context.Context类型
    32 context.Context类型 我们在上篇文章中讲到了 sync.WaitGroup 类型:一个可以帮我们实现一对多goroutine协作流程的同步工具。 **在使用 WaitGroup 值的时候,我们最好用“先统一 Add ,再并发 Done ,最后 Wait ”的标准模式来构建协作流程。** 如果在调用该值的 Wait 方法的同时,为了增大其计数器的值,而并发地...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-31sync.WaitGroup和sync.Once
    31 sync.WaitGroup和sync.Once 我们在前几次讲的互斥锁、条件变量和原子操作都是最基本重要的同步工具。在Go语言中,除了通道之外,它们也算是最为常用的并发安全工具了。 说到通道,不知道你想过没有,之前在一些场合下里,我们使用通道的方式看起来都似乎有些蹩脚。 比如:声明一个通道,使它的容量与我们手动启用的goroutine的数量相同,之后再利用这个通道,让主gorou...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-30原子操作(下)
    30 原子操作(下) 你好,我是郝林,今天我们继续分享原子操作的内容。 我们接着上一篇文章的内容继续聊,上一篇我们提到了, sync/atomic 包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称CAS)、加载(load)、存储(store)和交换(swap)。并且以此衍生出了两个问题。 今天我们继续来看第三个衍生问题: 比较并交换操作与...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-29原子操作(上)
    29 原子操作(上) 我们在前两篇文章中讨论了互斥锁、读写锁以及基于它们的条件变量,先来总结一下。 互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的goroutine只有一个。读写锁对共享资源的写操作和读操作则区别看待,并消除了读操作之间的互斥。 条件变量主要是用于协调想要访问共享资源的那些线程。当共享资源的状态发生变化时,它可以被用来通知被互斥锁阻塞的线程,它既可以基于互斥...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-28条件变量sync.Cond(下)
    28 条件变量sync.Cond (下) 你好,我是郝林,今天我继续分享条件变量sync.Cond的内容。我们紧接着上一篇的内容进行知识扩展。 问题 1:条件变量的 Wait 方法做了什么? 在了解了条件变量的使用方式之后,你可能会有这么几个疑问。 为什么先要锁定条件变量基于的互斥锁,才能调用它的 Wait 方法? 为什么要用 for 语句来包裹调用其 Wait...
    2015-01-01 15:20:27 | Go语言核心36讲
  • Go语言核心36讲-27条件变量sync.Cond(上)
    27 条件变量sync.Cond (上) 在上篇文章中,我们主要说的是互斥锁,今天我和你来聊一聊条件变量(conditional variable)。 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。 条件变量并不是被用来保护临界区和共享资源的,它是用于协调想要访问共享资源的那些线程的。...
    2015-01-01 15:20:27 | Go语言核心36讲