深入理解GO并发编程:从原理到实践,看这本就够了
正版保障 假一赔十 可开发票
¥
99.1
6.3折
¥
158
全新
库存3件
作者晁岳攀(@鸟窝)著
出版社电子工业出版社
ISBN9787121466465
出版时间2023-11
装帧平装
开本其他
定价158元
货号14451537
上书时间2024-12-29
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
晁岳攀(@鸟窝),rpcx微服务框架作者,Go语言布道师,技术专栏作家。
目录
第1章 Go并发编程和调度器 1.1 Go特别适合并发编程 1.2 并发 vs 并行 1.3 阿姆达尔定律:并发编程优化是有上限的 1.4 Go并发并不一定最快 1.5 Go运行时调度器 第2章 互斥锁 Mutex 2.1 竞争条件与数据竞争 2.2 Mutex的用法 2.2.1 一个并发问题 2.2.2 Mutex的使用 2.2.3 地道的用法 2.3 检查程序中的数据竞争 2.4 Mutex的历史实现 2.4.1 初始版本 2.4.2 多给新的 goroutine 一些机会 2.4.3 多给竞争者一些机会 2.4.4 解决饥饿问题 2.4.5 TryLock 2.5 Mutex的使用陷阱 2.5.1 误写 2.5.2 死锁 2.5.3 锁重入 2.5.4 复制锁 2.6 Mutex的扩展 2.6.1 可重入锁 2.6.2 支持并发 map 2.6.3 封装值 第3章 读写锁 RWMutex 3.1 读写锁的使用场景 3.2 读写锁的使用方法 3.3 读写锁的实现 3.3.1 RLock的实现 3.3.2 RUnlock的实现 3.3.3 Lock的实现 3.3.4 Unlock的实现 3.3.5 TryLock的实现 3.3.6 TryRLock的实现 3.4 读写锁的使用陷阱 3.4.1 锁重入 3.4.2 死锁 3.4.3 发现死锁 3.5 读写锁的扩展 第4章 任务编排好帮手 WaitGroup 4.1 WaitGroup的使用方法 4.2 WaitGroup的实现 4.3 WaitGroup的使用陷阱 4.3.1 Add 方法调用的时机不对 4.3.2 计数器的值为负数 4.3.3 错误的调用 Add的时机 4.3.4 知名项目中关于 WaitGroup 使用的 bug 4.4 WaitGroup的扩展 4.5 noCopy:辅助 vet 检查 第5章 条件变量 Cond 5.1 Cond的使用方法 5.2 Cond的实现 5.3 Cond的使用陷阱 5.3.1 调用 Wait 时没有加锁 5.3.2 唤醒之后不检查判断条件 5.4 在实际项目中使用 Cond的例子 第6章 单例化利器 Once 6.1 Once的使用方法 6.2 Once的实现 6.3 Once的使用陷阱 6.3.1 死锁 6.3.2 未初始化 第7章 并发 map 7.1 线程安全的 map 7.1.1 使用 map的两种常见错误 7.1.2 加读写锁:扩展 map,支持并发读/写 7.2 sync.Map的使用方法 7.3 sync.Map的实现 7.3.1 Swap 方法 7.3.2 Load 方法 7.3.3 Delete 方法 7.4 分片加锁:更高效的并发map 7.5 lock-free map 第8章 池 Pool 8.1 sync.Pool的使用方法 8.2 sync.Pool的实现 8.2.1 Get 方法的实现 8.2.2 Put 方法的实现 8.3 sync.Pool的使用陷阱 8.4 连接池 8.4.1 标准库中的 HTTP Client 池 8.4.2 数据库连接池 8.4.3 TCP 连 接池 8.4.4 Memcached Client 连接池 8.4.5 net/rpc 中的 Request/Response 对象池 8.5 goroutine/worker 池 第9章 不止是上下文:Context 9.1 Context的发展历史 9.2 Context的使用方法 9.2.1 基本用法 9.2.2 传递上下文 9.2.3 可撤销的上下文 9.2.4 带超时功能的上下文 9.3 Context 实战 9.4 Context的使用陷阱 9.5 Context的实现 9.5.1 WithValue的实现 9.5.2 WithCancel的实现 9.5.3 WithDeadline的实现 第10章 原子操作 10.1 原子操作的基础知识 10.2 原子操作的使用场景 10.3 atomic 提供的函数和类型 10.3.1 AddXXX 函数 10.3.2 CompareAndSwapXXX 函数 10.3.3 SwapXXX 函数 10.3.4 LoadXXX 函数 10.3.5 StoreXXX 函数 10.3.6 Value 类型 10.3.7 Bool、Int32、Int64、Pointer、Uint32、Uint64、Uintptr 10.4 uber-go/atomic 库 10.5 lock-free 队列的实现 10.6 原子性和可见性 第11章 channel 基础:另辟蹊径解决并发问题 11.1 channel的历史 11.2 channel的应用场景 11.3 channel的基本用法 11.4 channel的实现 11.4.1 channel的数据结构 11.4.2 初始化 11.4.3 发送数据 11.4.4 接收数据 11.4.5 关闭 channel 11.5 channel的使用陷阱 / 224 11.5.1 panic 和 goroutine 泄漏 11.5.2 知名项目踩过的坑 第12章 channel的内部实现和陷阱 12.1 使用反射操作 select 和 channel 12.2 channel的应用场景 第13章 Go内存模型 13.1 指令重排和可见性的问题 13.2 sequenced before、synchronized before 和 happens before 13.3 各种同步原语的同步保证 13.3.1 初始化 13.3.2 goroutine的运行 13.3.3 channel 13.3.4 锁(Mutex 和 RWMutex) 13.3.5 Once 13.3.6 WaitGroup 13.3.7 atomic操作 13.3.8 Finalizer、sync.Cond、sync.Map 和 sync.Pool 13.4 不正确的同步 第14章 信号量 Semaphore 14.1 什么是信号量 14.1.1 P/V 操作 14.1.2 信号量和互斥锁的区别与联系 14.2 信号量的 channel 实现 14.3 Go官方的信号量实现 14.4 使用信号量的常见错误 第15章 缓解压力利器 SingleFlight 15.1 SingleFlight的实现 15.2 SingleFlight的使用场景 第16章 循环屏障 CyclicBarrier 16.1 CyclicBarrier的使用场景 16.2 CyclicBarrier的实现 16.3 使用 CyclicBarrier的例子 第17章 分组操作 17.1 ErrGroup 17.1.1 ErrGroup的基本用法 17.1.2 ErrGroup 使用示例 17.2 其他实用的 Group 同步原语 17.2.1 SizedGroup/ErrSizedGroup 17.2.2 gollback 17.2.3 Hunch 17.2.4 schedgroup 第18章 限流 18.1 基于令牌桶实现的限流库 18.1.1 x/time/rate 18.1.2 juju/ratelimit 18.2 基于漏桶实现的限流库 18.3 分布式限流 第19章 Go并发编程和调度器 19.1 Leader 选举 19.1.1 选举 19.1.2 查询 19.1.3 监控 19.2 锁 Locker 19.3 互斥锁 Mutex 19.4 读写锁 RWMutex 19.5 分布式队列和优先级队列 19.6 分布式屏障 19.7 计数型屏障 19.8 软件事务内存 第20章 并发模式 20.1 并发模式概述 20.2 半异步/半同步模式 20.3 活动对象模式 20.4 断路器模式 20.5 截止时间和超时模式 20.6 回避模式 20.7 双重检查模式 20.8 保护式挂起模式 20.9 核反应模式 20.10 调度器模式 20.11 反应器模式 20.12 Proactor模式 20.13 percpu模式 20.14 多进程模式 第21章 经典并发问题解析 21.1 哲学家就餐问题 21.1.1 模拟哲学家就餐问题 21.1.2 解法一:就餐人数 21.1.3 解法二:奇偶处理方法 21.1.4 解法三:资源分级 21.1.5 解法四:引入服务生 21.2 理发师问题 21.2.1 使用 sync.Cond 解决理发师问题 21.2.2 使用 channel 实现信号量 21.2.3 有多个理发师的情况 21.3 水工厂问题 21.4 fizz buzz 问题 21.4.1 将并发转为串行 21.4.2 使用同一个channel 21.4.3 使用CyclicBarrier
内容摘要
本书从标准库的并发原语讲起,循序渐进的介绍扩展库、分布式的并发原语、并发模式和经典并发问题。内容从并发原语的使用场景、使用方法、常见错误,内部实现多层次的讲解,全面的介绍Go并发的知识。全书分为三个部分,主要部分又分为四个层次。第一部分主要介绍Go标准库提供的各种并发类型(并发原语)的知识,方便初学Go语言的同学能够掌握好Go语言的基础能力,包括一些Go开发者都不熟悉的类型。第二部分属于拔高的内容,介绍积累优秀的扩展库,帮助Go开发者扩展思维,提高视野。这些扩展库如果能够掌握,在工作中会大有裨益。第三部分介绍分布式并发原语。这部分内容鲜有人介绍,但是属于互联网公司常用的一些场景,尤其是开发大型分布式项目。很多读者缺乏这方面的经验和机会,通过阅读此书,可以弥补这方面的知识的缺乏和实战的机会。
精彩内容
本书从标准库的并发原语讲起,循序渐进的介绍扩展库、分布式的并发原语、并发模式和经典并发问题。内容从并发原语的使用场景、使用方法、常见错误,内部实现多层次的讲解,全面的介绍Go并发的知识。全书分为三个部分,主要部分又分为四个层次。第一部分主要介绍Go标准库提供的各种并发类型(并发原语)的知识,方便初学Go语言的同学能够掌握好Go语言的基础能力,包括一些Go开发者都不熟悉的类型。第二部分属于拔高的内容,介绍积累优秀的扩展库,帮助Go开发者扩展思维,提高视野。这些扩展库如果能够掌握,在工作中会大有裨益。第三部分介绍分布式并发原语。这部分内容鲜有人介绍,但是属于互联网公司常用的一些场景,尤其是开发大型分布式项目。很多读者缺乏这方面的经验和机会,通过阅读此书,可以弥补这方面的知识的缺乏和实战的机会。
媒体评论
"晁岳攀老师是国内公认的Go语言大师,他对Go语言的研究和贡献深得开发者喜爱。记得在GopherChina大会上,晁老师做的关于Go并发编程的分享广受好评。如今,晁老师将他对Go并发编程的独到见解融入本书中,令人万分期待!虽然并发编程是一个极具挑战性的领域,但晁老师以他一贯的通俗易懂的风格阐释复杂的并发概念,让读者在轻松愉悦中掌握Go语言强大的并发能力。本书将成为Go语言并发编程的经典入门读物。 ——谢孟军(Astaxie),积梦智能CEO,GopherChina发起人 本书以图文并茂的方式讲解Go语言并发编程,让读者能够真正看得懂、学得会、用得好。鸟窝大佬的不少文章皆通俗易懂,该书亦是如此。 ——徐新华(polarisxu),Go语言中文网站长 鸟窝老师的这本书是目前Go领域讲并发颇为深入的材料,几乎覆盖了所有Go语言的并发原语原理和使用指南。如果大家想要用Go来深入了解并发知识,有这本书就够了。 ——曹春晖(Xargin),资深Gopher 这是一本非常具有指导性的书,旨在帮助读者从根本上理解并发,并逐步学习并发编程。从第1章开始,本书就通过风趣的案例解释了并发的概念,内容简单易懂。特别是“鸟窝客栈”这个案例给我留下了深刻的印象。 ——杨文,Go夜读创始人 鸟窝老师在本书中深入浅出地剖析了Go语言的并发编程,内容丰富,案例翔实,是学习Go并发编程的好读物。对Go语言感兴趣的读者,一定不能错过这本优秀的书。 ——白明(Tony Bai),《Go语言精进之路》作者,tonybai.com博主 Go语言入门容易,精通难,尤其是并发部分!对于希望深入学习Go并发的开发者来说,这本书可以让你深入理解Go并发易用性背后的实现原理。 ——万俊峰,go-zero微服务框架作者,资深Gopher和Go语言布道师"
— 没有更多了 —
以下为对购买帮助不大的评价