Go并发编程实战(第2版) 内容简介

Go并发编程实战(第2版) 内容简介

Go并发编程实战(第2版) 目录

Go并发编程实战(第2版) 精彩文摘

本书首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据类型以及流程控制方法,接着阐述了与多进程编程和多线程编程有关的知识,然后重点介绍了goroutine、channel以及Go提供的传统同步方法,最后通过一个完整实例——网络爬虫框架进一步阐述Go语言的哲学和理念,同时分享作者在多年编程生涯中的一些见解和感悟。与上一版相比,本书不仅基于Go 1.8对上一版进行了全面更新,而且更深入地描绘了Go运行时系统的内部机理,并且大幅改进了示例代码。本书适用于有一定计算机编程基础的从业者以及对Go语言编程感兴趣的爱好者,非常适合作为Go语言编程进阶教程。第1章 初识Go语言 11.1 语言特性 11.2 安装和设置 21.3 工程结构 31.3.1 工作区 31.3.2 GOPATH 41.3.3 源码文件 51.3.4 代码包 81.4 标准命令简述 111.5 问候程序 131.6 小结 14第2章 语法概览 152.1 基本构成要素 152.1.1 标识符 152.1.2 关键字 162.1.3 字面量 172.1.4 操作符 172.1.5 表达式 192.2 基本类型 202.3 高级类型 222.3.1 数组 232.3.2 切片 232.3.3 字典 242.3.4 函数和方法 252.3.5 接口 282.3.6 结构体 292.4 流程控制 302.4.1 代码块和作用域 302.4.2 if语句 322.4.3 switch语句 322.4.4 for语句 342.4.5 defer语句 362.4.6 panic和recover 382.5 聊天机器人 402.6 小结 44第3章 并发编程综述 453.1 并发编程基础 453.1.1 串行程序与并发程序 463.1.2 并发程序与并行程序 463.1.3 并发程序与并发系统 473.1.4 并发程序的不确定性 473.1.5 并发程序内部的交互 473.2 多进程编程 483.2.1 进程 483.2.2 关于同步 553.2.3 管道 603.2.4 信号 653.2.5 socket 743.3 多线程编程 973.3.1 线程 983.3.2 线程的同步 1073.4 多线程与多进程 1253.5 多核时代的并发编程 1263.6 小结 130第4章 Go的并发机制 1314.1 原理探究 1314.1.1 线程实现模型 1324.1.2 调度器 1424.1.3 更多细节 1584.2 goroutine 1604.2.1 go语句与goroutine 1604.2.2 主goroutine的运作 1664.2.3 runtime包与goroutine 1664.3 channel 1694.3.1 channel的基本概念 1694.3.2 单向channel 1804.3.3 for语句与channel 1844.3.4 select语句 1854.3.5 非缓冲的channel 1904.3.6 time包与channel 1924.4 实战演练:载荷发生器 1984.4.1 参数和结果 1994.4.2 基本结构 2014.4.3 初始化 2064.4.4 启动和停止 2124.4.5 调用器和功能测试 2214.5 小结 231第5章 同 步 2325.1 锁的使用 2325.1.1 互斥锁 2325.1.2 读写锁 2365.1.3 锁的完整示例 2385.2 条件变量 2445.3 原子操作 2475.3.1 增或减 2475.3.2 比较并交换 2495.3.3 载入 2505.3.4 存储 2515.3.5 交换 2515.3.6 原子值 2525.3.7 应用于实际 2565.4 只会执行一次 2575.5 WaitGroup 2585.6 临时对象池 2625.7 实战演练——Concurrent Map 2655.8 小结 280第6章 网络爬虫框架设计和实现 2816.1 网络爬虫与框架 2816.2 功能需求和分析 2836.3 总体设计 2846.4 详细设计 2866.4.1 基本数据结构 2866.4.2 接口的设计 2936.5 工具的实现 3096.5.1 缓冲器 3096.5.2 缓冲池 3116.5.3 多重读取器 3176.6 组件的实现 3186.6.1 内部基础接口 3196.6.2 组件注册器 3216.6.3 下载器 3236.6.4 分析器 3256.6.5 条目处理管道 3286.7 调度器的实现 3296.7.1 基本结构 3296.7.2 初始化 3316.7.3 启动 3336.7.4 停止 3436.7.5 其他方法 3446.7.6 总结 3456.8 一个简单的图片爬虫 3466.8.1 概述 3466.8.2 命令参数 3466.8.3 初始化调度器 3486.8.4 监控调度器 3546.8.5 启动调度器 3646.9 扩展与思路 3656.10 本章小结 368附录A Go语言的学习资源 369Go语言除了为我们提供特有的并发编程模型和工具之外,还提供了传统的同步工具。它们都在Go的标准库代码包sync和sync/atomic中。如果你仔细阅读过上一章的话,应该还会记得互斥量、条件变量等名词,以及载荷发生器中用到的原子操作。在Go中,除了原子操作也有互斥量和条件变量,请看下面的介绍。5.1 锁的使用本节,我将介绍Go提供的与锁有关的API,包括互斥锁和读写锁。上一章讲到了互斥锁,但没有提到读写锁,其实这两种锁对于传统的并发程序来说同等重要。5.1.1 互斥锁互斥锁是传统并发程序对共享资源进行访问控制的主要手段,它由标准库代码包sync中的Mutex结构体类型表示。sync.Mutex类型只有两个公开的指针方法——Lock和Unlock。顾名思义,前者用于锁定当前的互斥量,而后者则用于对当前的互斥量进行解锁。sync.Mutex类型的零值表示未被锁定的互斥量。也就是说,它是一个开箱即用的工具,我们只需对它进行简单声明,就像这样:var mutex sync.Mutex在使用其他编程语言(比如C或Java)的锁类工具时,我们可能会犯一个低级错误:忘记及时解开已被锁住的锁,从而导致诸如流程执行异常、线程执行停滞,甚至程序死锁等一系列问题。然而,在Go中,这个低级错误的发生率极低,其主要原因是存在defer语句。

类似文章

发表回复

您的电子邮箱地址不会被公开。