可视化学习 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 年前31.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 年前3Golang 101(Go语言101 中文版) v1.21.a
为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 在一块儿是Go的另一个主 要卖点。 虽然这三项是C家族语言的共同特征,但是在Web开发领域,很少有语言同 时拥有这四个特征。 事实上,这就是我当初从Java转到Go进行Web开发的原因。 内置并发编程支持也算是Go的卖点,虽然我个人认为它不是Go的主要卖点。 良好的代码可读性是Go的另一个重要卖点。 我感觉可读性是Go在设计的时候考虑的 最重要的一个因素。 第0章:关于《Go语言101》0 码力 | 591 页 | 21.40 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 合在一块儿是Go的另一 个主要卖点。 虽然这三项是C家族语言的共同特征,但是在Web开发领域,很 少有语言同时拥有这四个特征。 事实上,这就是我当初从Java转到Go进行Web 开发的原因。 内置并发编程支持也算是Go的卖点,虽然我个人认为它不是Go的主要卖点。 良好的代码可读性是Go的另一个重要卖点。 我感觉可读性是Go在设计的时候 考虑的最重要的一个因素。 良好的跨平台支持也应该算是Go的一个卖点,尽管如今这个卖点并不是很新0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型 - 如何使用和解读组合类型 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 合在一块儿是Go的另 一个主要卖点。 虽然这三项是C家族语言的共同特征,但是在Web开发领域, 很少有语言同时拥有这四个特征。 事实上,这就是我当初从Java转到Go进行 Web开发的原因。 内置并发编程支持也算是Go的卖点,虽然我个人认为它不是Go的主要卖点。 良好的代码可读性是Go的另一个重要卖点。 我感觉可读性是Go在设计的时候 考虑的最重要的一个因素。 良好的跨平台支持也应该算是Go的一个卖点,尽管如今这个卖点并不是很新0 码力 | 821 页 | 956.82 KB | 1 年前32.Go语言实现中的几个研究课题_毛康力
zenlife.tk/ 有同事称我⼤大神或⼤大师(湿?) 其实,我只是⼀一个研究僧 ⼤大纲 • 并发 • 接⼝口 • 垃圾回收 • 调度 • 死锁检测 并发 • goroutine提供轻量的并发机制 • channel⽤用于goroutine之间通信 并发 goroutine • 协程!!! • 每个goroutine必须有独⽴立的栈 • 如何让goroutine⾮非常轻量呢 select • 研究课题:能否实现lock-free channels? • 使⽤用前获取select中的所有channel的锁 • 按channel结构体的地址顺序加锁 ⼤大纲 • 并发 • 接⼝口 • 垃圾回收 • 调度 • 死锁检测 接⼝口 • 接⼝口定义了⼀一系列⽅方法 • 如果类型实现了这些⽅方法,它就实现了这个接⼝口 • 接⼝口不依赖实现 • C说:我不管。(使⽤用者累) • C++把同⼀一个函数(的不同类型)实现了很多遍。(编译器累) • Java把所有东⻄西都打包了,只有⼀一个函数。(运⾏行时累) • 研究课题:怎么样实现才合理? ⼤大纲 • 并发 • 接⼝口 • 垃圾回收 • 调度 • 死锁检测 垃圾回收 • ⺩王尼玛:内存管理太重要!交给机器我不放⼼心 • 曹尼玛:内存管理太重要!给⺩王尼玛管我不放⼼心 Go还是很体贴⼤大伙的~0 码力 | 37 页 | 566.26 KB | 1 年前3Go 入门指南(The way to Go)
法和晦 涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提 倡通过接口来针对面向对象编程,通过 goroutine 和 channel 来支持并发和并行编程。 这本书是为那些想要学习 Go 这门全新的,迷人的和充满希望的编程语言的开发者量身定做的。当然,你 在学习 Go 语言之前需要具备一些关于编程的基础知识和经验,并且拥有合适的学习环境,但你并不需要 在本书的第三部分,你将会学习到如何处理不同格式的文件(第 12 章)和如何在 Go 语言中巧妙地使用 错误处理机制(第 13 章)。然后我们会对 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发 和多核应用的基本技巧的讲解(第 14 章)。最后,我们会讨论如何将 Go 语言应用到分布式和 Web 应用 中的相关网络技巧(第 15 章)。 我们会在本书的第四部分向你展示许多 Go 语言 语言的代码更加简洁,从而 比传统的面向对象语言更容易阅读和理解。 与 C++ 或 Java 这些有着庞大体系的语言相比,Go 语言简洁到可以将它整个的装入你的大脑中,而且比 学习 Scala(Java 的并发语言)有更低的门槛,真可谓是 21 世纪的 C 语言! 作为一门系统编程语言,你不应该为 Go 语言的大多数代码示例和练习都和控制台有着密不可分的关系而 感到惊奇,因为提供平台依赖性的 GUI(0 码力 | 380 页 | 2.97 MB | 1 年前3Go 入门指南(The way to Go)
法和晦涩难懂的概念 来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提倡通过接口来针对面向 对象编程,通过 goroutine 和 channel 来支持并发和并行编程。 这本书是为那些想要学习 Go 这门全新的,迷人的和充满希望的编程语言的开发者量身定做的。当然,你在学习 Go 语言之前需要具备一些关于编程的基础知识和经验,并且拥有合适的学习环境,但你并不需要对 在本书的第三部分,你将会学习到如何处理不同格式的文件(第 12 章)和如何在 Go 语言中巧妙地使用错误处理机 制(第 13 章)。然后我们会对 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发和多核应用的基 本技巧的讲解(第 14 章)。最后,我们会讨论如何将 Go 语言应用到分布式和 Web 应用中的相关网络技巧(第 15 章)。 我们会在本书的第四部分向你展示许多 Go 语言的 语言的代码更加简洁,从而比传统的面向对象语言更容易阅读 和理解。 与 C++ 或 Java 这些有着庞大体系的语言相比,Go 语言简洁到可以将它整个的装入你的大脑中,而且比学习 Scala(Java 的并发语言)有更低的门槛,真可谓是 21 世纪的 C 语言! 作为一门系统编程语言,你不应该为 Go 语言的大多数代码示例和练习都和控制台有着密不可分的关系而感到惊奇, 因为提供平台依赖性的 GUI(0 码力 | 466 页 | 4.44 MB | 1 年前32.4 Go 1.4 runtime
cache span span ... span: 管理内存块的元数据。 allspans: 垃圾回收遍历。 2. Garbage Collector 垃圾回收器 gc. 阈值触发,并行标记,并发清理。 定期强制回收,释放物理内存。 版本升级,垃圾回收效率总是核心问题。 gogc. 阈值检查,或强制回收。 malloc next_gc 0 gogc runtime.gc() mark markroot scanblock heap.bitmap Go 1.5: concurrent pauseless collector. sweep. 串行,或与用户逻辑并发执行。 gc eagersweep concurrent goroutine bgsweep starttheworld mem allocator sweepone all spans 再次使用时,因缺页异常,由内核重新分 配物理内存。 Microsoft Windows 系统不⽀支持 madvise。 3. Goroutine Scheduler 并发调度器 goroutine. 轻量级实现,支持创建成千上万并发任务。 线程多路复用。 极小自定义初始栈。 任务在多个线程间切换。 scheduler. 三种抽象模型协作。 M G P thread0 码力 | 29 页 | 608.57 KB | 1 年前32-6-Golang 在 Baidu-FrontEnd 的应用-陶春华
Go对比 • 采用Go语言重构BFE –背景和技术路线 –GC问题 –协议一致性 –分布式架构 后台程序开发的需求(1) • 性能 –C/C++, Java –Python, Ruby • 并发性 –Process, Thread, Event(编程难度) • 开发效率 –语言的描述效率:代码量 –语言的简洁、易用 –库支持 后台程序开发的需求(2) • 大型程序的组织 –数据封装能力 –C程序中很大比例的Bug和内容有关 • 分布式/高并发的处理 –10年前还是一个很hot的话题;目前也还没有普 遍掌握 –CPU资源的调度:Process/Thread/Event –数据的封装和互斥访问; –并行运算逻辑的同步 C vs Python (1) • 性能: – 相差10倍以上 – Python: 解释执行,动态类型 • 并发性能 – C:直接用系统的机制 – Python: Python (3) • 上线和运维 –C: 可编译为独立可执行程序(包括依赖的库) –Python: 需要python运行环境,及依赖的库 Golang (1) • 性能 –和C接近 • 并发性 –Go routine: 屏蔽底层的机制,充分利用cpu资源 –多线程模型:容易思考 • 开发效率 –描述能力和python接近 –较丰富的库(系统库,第三方库) Golang (2)0 码力 | 35 页 | 730.17 KB | 1 年前3
共 47 条
- 1
- 2
- 3
- 4
- 5