可视化学习 Go 并发编程Go 并发编程 2017.8.5 黄庆兵 - 网易 bingohuang.com 并发 简单来说,并发是一种构造程序的方式 Concurrency is not Parallelism Slide (http://talks.golang.org/2012/waza.slide) 1. 并发很强大 2. 并发帮助实现并行,使并行(扩展等)变得容易 3. 并发不是并行,并发重点是 ,两者不同,但相关。 04:22 / 31:21 可视化 并发(Concurrency) & 并行(Parallelism) 一图胜千言! 并行(PARALLELISM) 这是并行 (/2017/go-concurrency-visualize/parallelism.html) 并发(CONCURRENCY) 这是并发 (/2017/go-concurrency-visualize/pingpong36 /pingpong36.html) 为什么要关注并发?当今是多核的时代,并发的世界 多核的时代 并发编程并不容易,但 Go 对并发有很好的支持 Go 语言中的并发 goroutine - 并发执行 channel - 同步和消息传输 select - 多路并发控制 Goroutine 类似于 UNIX 中的 & 很像线程,但更轻量 一个 goroutine 就是一个独立运行的函数0 码力 | 29 页 | 1.48 MB | 1 年前3
Go Web编程《Go Web 编程》 《Go Web 编程》 因为自己对Web开发比较感兴趣,所以最近抽空在写一本开源的书籍《Go Web编程》《Build Web Application with Golang》。写这本书不表示我能力很强,而是我愿意分享,和大家一起分享Go写Web应用的一些东西。 对于从PHP/Python/Ruby转过来的同学了解Go怎么写Web应用开发的 对于从C/C++转过来的同学了解Web到底是怎么运行起来的 这样读者就可以把相应的Markdown文件编译成html文件,执行go build build.go,执行生成的文件,就会在底目 录下生成相应的html文件 交流 交流 欢迎大家加入QQ群:259316004 《Go Web编程》专用交流群 大家有问题还可以上德问上一起交流学习:http://www.dewen.org/topic/165 致谢 致谢 首先要感谢Golang-China的QQ群102319854 Go开发工具 1.5. 小结 2.Go语言基础 2.1. 你好,Go 2.2. Go基础 2.3. 流程和函数 2.4. struct 2.5. 面向对象 2.6. interface 2.7. 并发 2.8. 小结 3.Web基础 3.1 web工作方式 3.2 Go搭建一个简单的web服务 3.3 Go如何使得web工作 3.4 Go的http包详解 3.5 小结 4.表单 4.10 码力 | 295 页 | 5.91 MB | 1 年前3
1.5 Go 语言构建高并发分布式系统实践Weibo: @johntech-o Date: 2015.04.25 go语⾔言并发编程实践 以360消息推送系统为例 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 测试环境,可以通过300w⻓长连接压测(⺴⽹网络,连接稳定,⽆无带宽限制,实际可以更⾼高 ,决定于⼲⼴广播时候业务内存开销的cpu消耗带来的⼼心跳或者业务延时能否接受) 以360消息推送系统为例 ⾼高并发、通信交互复杂 Dispatcher Service Room Service Proxy Service Register Service Saver Service � �/ ����/ ���� Admin���� ���������� �������� ������� ���push������ ������ 消息系统规模架构:重业务逻辑 ⾼高并发、通信交互复杂 Dispatcher Service Room Service Proxy Service Register Service Saver Service0 码力 | 39 页 | 5.23 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a目录 1 目录 第0章:关于《Go语言101》 - 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局0 码力 | 591 页 | 21.40 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a目录 第0章:关于《Go语言101》 - 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a目录 第0章:关于《Go语言101》 - 为什么写这本书 第1章:致谢 第2章:Go语言简介 - 为什么Go语言值得学习 第3章:Go官方工具链 - 如何编译和运行Go程序 Go编程入门 第4章:程序源代码基本元素介绍 第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局0 码力 | 821 页 | 956.82 KB | 1 年前3
Go 入门指南(The way to Go)ZH_CN 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多 的乐趣 对于学习 Go 编程语言的爱好者来说,这本书无疑是最适合你的一本书籍,这里包含了当前最全面的学习 资源。本书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自 身在软件工程、编程语言和数据库开发的授课经验,将这些零碎的知识点组织成系统化的概念和技术分类 来进行讲解。 随着软件 间在编译这些文件上,同 时编程语言的设计思想也已经非常陈旧,这些情况都充分证明了现有的编程语言已不符合时下的生产环 境。尽管硬件在过去的几十年中有了飞速的发展,但人们依旧没有找到机会去改变 C++ 在软件开发的重 要地位,并在实际开发过程中忍受着它所带来的令人头疼的一些问题。因此学者们坐下来总结出了现在生 产环境与软件开发之间的主要矛盾,并尝试设计一门全新的编程语言来解决这些问题。 以下 以下就是他们讨论得出的对编程语言的设计要求: 能够以更快的速度开发软件 开发出的软件能够很好地在现代的多核计算机上工作 开发出的软件能够很好地在网络环境下工作 使人们能够享受软件开发的过程 Go 语言就在这样的环境下诞生了,它让人感觉像是 Python 或 Ruby 这样的动态语言,但却又拥有像 C 或者 Java 这类语言的高性能和安全性。 Go 语言出现的目的是希望在编程领域创造最实用的0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)都将成为知识的传承者。 致谢 - 7 - 本文档使用 书栈(BookStack.CN) 构建 阅前必读 在接触 Go 语言之后,对这门编程语言非常着迷,期间也陆陆续续开始一些帮助国内编程爱好者了解和发展 Go 语言 的工作,比如开始录制视频教程《Go编程基础》。但由于目前国内并没有比较好的 Go 语言书籍,而国外的优秀书籍 因为英文的缘故在一定程度上也为不少 Go 语言爱好者带来了一些学习上的困扰,不仅为了加快扩散 许可协议)。 授权许可 阅前必读 - 9 - 本文档使用 书栈(BookStack.CN) 构建 内容介绍 在接触 Go 语言之后,对这门编程语言非常着迷,期间也陆陆续续开始一些帮助国内编程爱好者了解和发展 Go 语言 的工作,比如开始录制视频教程《Go编程基础》。但由于目前国内并没有比较好的 Go 语言书籍,而国外的优秀书籍 因为英文的缘故在一定程度上也为不少 Go 语言爱好者带来了一些学习上的困扰,不仅为了加快扩散 @spawnris @domainname @leisore @dake @glight2000 @songleo 适合有一定编程基础,初学 Go 语言的爱好者。 > Martini&Macaron 交流群:371440803 > Golang 编程:245386165 更新日期 更新内容 2015-1-6 14.6 协程和恢复(recover) 内容介绍 本书介绍 关于译者0 码力 | 466 页 | 4.44 MB | 1 年前3
2-6-Golang 在 Baidu-FrontEnd 的应用-陶春华采用Go语言重构BFE –背景和技术路线 –GC问题 –协议一致性 –分布式架构 后台程序开发的需求(1) • 性能 –C/C++, Java –Python, Ruby • 并发性 –Process, Thread, Event(编程难度) • 开发效率 –语言的描述效率:代码量 –语言的简洁、易用 –库支持 后台程序开发的需求(2) • 大型程序的组织 –数据封装能力 –Namespace –编译 –程序异常的trouble shooting 后台程序开发的需求(3) • 上线和运维 –对运行环境的依赖 –对库(动态库)的依赖 后台程序编程的难点 • 内存的管理 –C程序中很大比例的Bug和内容有关 • 分布式/高并发的处理 –10年前还是一个很hot的话题;目前也还没有普 遍掌握 –CPU资源的调度:Process/Thread/Event –数据的封装和互斥访问; –数据的封装和互斥访问; –并行运算逻辑的同步 C vs Python (1) • 性能: – 相差10倍以上 – Python: 解释执行,动态类型 • 并发性能 – C:直接用系统的机制 – Python: 自己实现的thread, 只能使用一个CPU • 开发效率 – 相差5-10倍 – 内存的处理是一个难点 – dict/map, list C vs Python (2) • 大型程序的组织0 码力 | 35 页 | 730.17 KB | 1 年前3
Go读书会第二期维特根斯坦(语言哲学奠基人) “ 不能改变你思维方式的语言,不值得学习” - Alan Perlis ( 首届图灵奖得主 ) Part1 - 进入 Go 语言编程思维导引 站在语言设计者的高度理解 Go 的与众不同 Go 诞生 与演进 Go 设计哲 学 Go 编程思 维举例 怎么学习 Go 思维? 学习本质是一种模仿。要学习 Go 思维,就要 去模仿 go 团队、 go 社区的优秀项目和代 码,看看他们怎么做的 • 接口的内部表示 • 接口设计 • 接口与组合 接口:一切皆组合 Part6 – 语法核心:并发编程 践行哲学,遵循惯例,认清本质,理解原理 • 并发设计 vs. 并行设计 • 并发原语的原理与应用模式 • 低级同步原语 (sync 和 atomic) 并发:优先考虑并发设计 Part7 – 错误处理 践行哲学,遵循惯例,认清本质,理解原理 • 错误处理的几种策略 • • 优化 if err != nil • Panic 不是错误处理 错误处理:保守与创新 Part8 – 编程实践:测试、调试与性能剖析 践行哲学,遵循惯例,认清本质,理解原理 • Go 测试惯例与组织形式 • 模糊测试 (fuzzing test) • 性能基准测试、度量数据与 pprof 剖析 • 调试实践 聚焦编码之外的 Go 工具链使用实践 Part9 – 标准库、反射与0 码力 | 26 页 | 4.55 MB | 1 年前3
共 56 条
- 1
- 2
- 3
- 4
- 5
- 6













