CppGuide社区 CppGuide社区
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
首页
  • 🔥最新谷歌C++风格指南(含C++17/20)
  • 🔥C++17详解
  • 🔥C++20完全指南
  • 🔥C++23快速入门
🔥C++面试
  • 第1章 C++ 惯用法与Modern C++篇
  • 第2章 C++开发工具与调试进阶
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 网络通信协议设计
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 服务其他模块设计
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 🔥C++游戏编程入门(零基础学C++)
  • 🔥使用C++17从零开发一个调试器 (opens new window)
  • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
  • 🔥使用C++从零写一个C语言编译器 (opens new window)
  • 🔥从零用C语言写一个Redis
  • leveldb源码分析
  • libevent源码分析
  • Memcached源码分析
  • TeamTalk源码分析
  • 优质源码分享 (opens new window)
  • 🔥远程控制软件gh0st源码分析
  • 🔥Windows 10系统编程
  • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
  • TCP源码实现超详细注释版.pdf (opens new window)
  • 高效Go并发编程
  • Go性能调优
  • Go项目架构设计
  • 🔥使用Go从零开发一个数据库
  • 🔥使用Go从零开发一个编译器 (opens new window)
  • 🔥使用Go从零开发一个解释器 (opens new window)
Rust编程指南
  • SQL零基础指南
  • MySQL开发与调试指南
GitHub (opens new window)
  • 高效Go并发编程 说明
    • 高效Go并发编程 说明
    • 适合读者
    • 目录
  • 1. 并发——高级概述
  • 2 Go并发原语
  • 3 Go内存模型
  • 4. 一些著名的并发问题
  • 5 工作池与管道
  • 6. 错误处理
  • 7 定时器和时钟
  • 8 并发处理请求
  • 9. 原子内存操作
  • 10 并发问题排查
目录

高效Go并发编程 说明

# 前言

Page Views Count (opens new window)

# 高效Go并发编程 说明

语言塑造我们的思维方式。我们处理问题和制定解决方案的方式,取决于我们能用语言表达的概念。编程语言也是如此。面对同一个问题,不同语言编写的解决方案程序可能会有所不同。本书主要讲述如何用Go语言表达并发算法来编写程序,以及理解这些程序的运行机制。

Go语言与许多流行语言的不同之处在于,它注重代码的可理解性。这和可读性不是一回事。许多用易读语言编写的程序,理解起来却并不容易。过去,我也掉进过这样的陷阱:使用那些让编程变得轻松的框架,编写结构井然有序的程序。但这种做法存在一个问题:程序编写完成后,它便开始了自己的 “生命历程”,其他人会接手维护工作。开发阶段积累的 “团队内部知识” 会流失,团队成员面对这个程序时,如果没有最初开发团队中最后一位成员的帮助,就无法理解它。开发程序和写小说没有太大区别。写小说是为了让别人阅读,程序也是如此。如果没人能理解你的程序,它就很难经得起时间的考验。

本书将尝试解释如何运用Go语言的并发结构进行思考,这样当你拿到一段代码时,就能明白程序的运行逻辑,同时别人也能理解你编写的内容。本书开篇会对并发以及Go语言对并发的处理方式进行高级概述。然后,会运用并发算法解决几个数据处理问题。毕竟,编写程序就是为了处理数据。我希望,通过观察在解决实际问题过程中并发模式是如何自然形成的,能帮助你掌握高效使用这门语言的技能。后面的章节会涉及更多示例,包括定时任务、周期性任务、服务器编程、流处理以及原子操作的实际应用。最后一章将讨论故障排查、调试,以及对可扩展性有用的额外检测手段。

在一本书中涵盖所有与并发相关的主题是不可能的,还有很多领域未被探讨。然而,我相信,一旦你研究完书中的示例,在使用并发解决问题时,你会更有信心。大家都说并发编程很难,但正确使用这门语言会让编写正确的程序变得更容易。你要始终牢记一个经验法则:正确性优先于性能。所以,先确保程序能正确运行,然后再考虑提高运行速度。

本文为《Effective Concurrency in Go》的译本,首发于 cppguide.cn (opens new window)。

限于水平有限,如果您在阅读过程中有任何问题,可以联系小方(微信cppxiaofang),也欢迎加入小方的 技术交流群,群里面有很多技术高手,不定期发布招聘信息,加群请备注“加微信群”。

小方微信公众号【CppGuide】:

img

# 适合读者

如果你是一名对Go语言有基础知识,并且希望在高并发后端应用开发领域获得专业知识的开发者,那么本书很适合你。本书也适合不同经验水平的Go语言开发者,帮助他们让后端系统更加健壮和可扩展。

# 目录

前言

  1. 并发——高级概述
    • 技术要求
    • 并发与并行
    • 共享内存与消息传递
    • 原子性、竞态条件、死锁和饥饿
    • 总结
    • 问题
    • 延伸阅读
  2. Go语言并发原语
    • 技术要求
    • 协程(Goroutines)
    • 通道(Channels)
    • 互斥锁(Mutex)
    • 等待组(Wait groups)
    • 条件变量(Condition variables)
    • 总结
    • 问题
  3. Go语言内存模型
    • 为什么需要内存模型
    • 内存操作之间的先行发生(happened-before)关系
    • Go语言并发原语的同步特性
    • 包初始化
    • 协程
    • 通道
    • 互斥锁
    • 原子内存操作
    • 映射(Map)、一次性初始化(Once)和等待组
    • 总结
    • 延伸阅读
  4. 一些著名的并发问题
    • 技术要求
    • 生产者-消费者问题
    • 哲学家就餐问题
    • 速率限制
    • 总结
  5. 工作池(Worker Pools)和管道(Pipelines)
    • 技术要求
    • 工作池
    • 管道、扇出和扇入
    • 异步管道
    • 扇出/扇入
    • 有序扇入
    • 总结
    • 问题
  6. 错误处理
    • 错误处理
    • 流水线
    • 服务器
    • 恐慌(Panics)
    • 总结
  7. 定时器和ticker(Tickers)
    • 技术要求
    • 定时器——稍后执行任务
    • ticker——定期执行任务
    • 心跳
    • 总结
  8. 并发处理请求
    • 技术要求
    • 上下文、取消和超时
    • 后端服务
    • 分配工作和收集结果
    • 信号量——限制并发数
    • 流数据
    • 处理多个流
    • 总结
  9. 原子内存操作
    • 技术要求
    • 内存保证
    • 比较并交换
    • 原子操作的实际应用
    • 计数器
    • 心跳和进度指示器
    • 取消操作
    • 检测变化
    • 总结
  10. 排查并发问题
    • 技术要求
    • 读取堆栈跟踪信息
    • 检测故障并修复
    • 调试异常
    • 总结
    • 延伸阅读
上次更新: 2025/04/08, 19:40:35
1. 并发——高级概述

1. 并发——高级概述→

最近更新
01
C++语言面试问题集锦 目录与说明
03-27
02
第四章 Lambda函数
03-27
03
第二章 关键字static及其不同用法
03-27
更多文章>
Copyright © 2024-2025 沪ICP备2023015129号 张小方 版权所有
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式