可视化学习 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-concu 让并发编程变的简单起来 但是问题来了 我们怎样去讲解 Go 的并发? 我们怎样思考 Go 的并发过程? 最终,我们怎样更好的实践 Go 并发编程? 祭出法宝 - GoTrace 一种将 Go 并发过程可视化的开源 (https://github.com/divan/gotrace) 工具 出自 divan (https://github.com/divan) 大神,主要包含两个程序: gotrace(go):分析0 码力 | 29 页 | 1.48 MB | 1 年前3
1.5 Go 语言构建高并发分布式系统实践便利 = 原⽣生profiling⼯工具 + 开协程模拟测试终端+协程协作模拟业务 go语⾔言运维管理⽅方⾯面的独特魅⼒力…… 具有go语⾔言特⾊色的运维 Æ 可视化平台 Profiling可视化 将常规排查问题从⼿手⼯工经验化,变成流程化的过程 ⽐比较不同时间维度,两次上线后,进程的各种状态 对于优化上线的效果,可评估(上线新功能发现问题与后续确定KPI神器) 性能可视化 具有go语⾔言特⾊色的运维 Æ 可视化平台 Profiling可视化 将常规排查问题从⼿手⼯工经验化,变成流程化的过程 ⽐比较不同时间维度,两次上线后,进程的各种状态 对于优化上线的效果,可评估(上线新功能发现问题与后续确定KPI神器) 通信库状态可视化 Æ 最接近业务场景的百万级别压测后台 客户端sdk->集成profiling功能-> keeper调⽤用并存储 Æ 客户端sdk-> ⾃自定义信息(通信库信息) -> keeper调⽤用并存储 Æ keeper本地保持所有客户端状态信息,按时间和需求获取其他富信息, 提供接⼝口给后台 Æ 所有组件都必须通过⺴⽹网络启动,通过agent调⽤用命令⾏行 架构迭代 总结回顾0 码力 | 39 页 | 5.23 MB | 1 年前3
大规模高性能区块链架构设计模式与测试框架-李世敬消息分发器限流 P2P⽹络层通过消息分发器将消息带权分发给对应 模块处理,降低各模块由于处理能⼒差异⽽相互⼲ 扰,保证核⼼模块正常运⾏ ⽹络带宽限流 限制节点最⼤出⼝带宽流量,适⽤于对⽹络带宽 有限制需求的场景 功能简介 22 趣链科技 版权所有 ©2016-2021 22 趣链科技 版权所有 ©2016-2021 22 趣链科技 版权所有 ©2016-2021 22 log-Segment-001 ©2016-2021 26 趣链科技 版权所有 ©2016-2021 26 趣链科技 版权所有 ©2016-2021 26 区块链性能测试工具-产品基础模型 测试 平台 Hyperchain 测试脚本 可视化⼯具 交易成功率 交易吞吐量 交易延迟 … 压测指标 Fabric Ethereum … 测试脚本 测试脚本 27 趣链科技 版权所有 ©2016-2021 27 趣链科技 版权所有 ©2016-2021 核心架构 测试⽤例 控制器 压⼒调度 … 数据统计 虚拟机池 worker 0 master 压⼒调度 … 数据统计 虚拟机池 worker n 测试数据 脚本/参数 存储/可视化 数据汇总 区块链平台 … NBI NBI 29 趣链科技 版权所有 ©2016-2021 29 趣链科技 版权所有 ©2016-2021 29 趣链科技 版权所有 ©2016-2021 290 码力 | 39 页 | 56.58 MB | 1 年前3
Hello 算法 1.1.0 Go版代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观察算法代码的执行过程;也可以点击“全屏观看”,以 获得更好的阅览体验。 图 0‑6 Python 代码的可视化运行 第 0 章 前言 hello‑algo.com 8 0.2.4 在提问讨论中共同成长 更新条件变量 i++ i *= 2 } return res } 总的来说,for 循环的代码更加紧凑,while 循环更加灵活,两者都可以实现迭代结构。选择使用哪一个应该 根据特定问题的需求来决定。 3. 嵌套循环 我们可以在一个循环结构内嵌套另一个循环结构,下面以 for 循环为例: // === File: iteration.go === /* 双层 for 循环 */ 位,能够表示 256 个不同的字符。 在世界范围内,陆续出现了一批适用于不同地区的 EASCII 字符集。这些字符集的前 128 个字符统一为 ASCII 码,后 128 个字符定义不同,以适应不同语言的需求。 3.4.2 GBK 字符集 后来人们发现,EASCII 码仍然无法满足许多语言的字符数量要求。比如汉字有近十万个,光日常使用的就 有几千个。中国国家标准总局于 1980 年发布了 GB23120 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观察算法代码的执行过程;也可以点击“全屏观看”,以 获得更好的阅览体验。 图 0‑6 Python 代码的可视化运行 第 0 章 前言 hello‑algo.com 8 0.2.4 在提问讨论中共同成长 更新条件变量 i++ i *= 2 } return res } 总的来说,for 循环的代码更加紧凑,while 循环更加灵活,两者都可以实现迭代结构。选择使用哪一个应该 根据特定问题的需求来决定。 3. 嵌套循环 我们可以在一个循环结构内嵌套另一个循环结构,下面以 for 循环为例: // === File: iteration.go === /* 双层 for 循环 */ 位,能够表示 256 个不同的字符。 在世界范围内,陆续出现了一批适用于不同地区的 EASCII 字符集。这些字符集的前 128 个字符统一为 ASCII 码,后 128 个字符定义不同,以适应不同语言的需求。 3.4.2 GBK 字符集 后来人们发现,EASCII 码仍然无法满足许多语言的字符数量要求。比如汉字有近十万个,光日常使用的就 有几千个。中国国家标准总局于 1980 年发布了「GB2312」字符集,其收录了0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观察算法代码的执行过程;也可以点击“全屏观看”,以 获得更好的阅览体验。 图 0‑6 Python 代码的可视化运行 第 0 章 前言 www.hello‑algo.com 8 0.2.4 在提问讨论中共同成长 更新条件变量 i++ i *= 2 } return res } 总的来说,for 循环的代码更加紧凑,while 循环更加灵活,两者都可以实现迭代结构。选择使用哪一个应该 根据特定问题的需求来决定。 3. 嵌套循环 我们可以在一个循环结构内嵌套另一个循环结构,下面以 for 循环为例: // === File: iteration.go === /* 双层 for 循环 */ 位,能够表示 256 个不同的字符。 在世界范围内,陆续出现了一批适用于不同地区的 EASCII 字符集。这些字符集的前 128 个字符统一为 ASCII 码,后 128 个字符定义不同,以适应不同语言的需求。 3.4.2 GBK 字符集 后来人们发现,EASCII 码仍然无法满足许多语言的字符数量要求。比如汉字有近十万个,光日常使用的就 有几千个。中国国家标准总局于 1980 年发布了 GB23120 码力 | 384 页 | 18.49 MB | 10 月前3
基于 mesos 的容器调度框架Mesos 调度 各个 Agent 启动后, 向 Master 注册,携带统计资源, 由 Master 决定给每个框架多少资源, 默认 采用分级主导资源公平算法 每个框架收到资源后, 根据自身任务需求, 调度任务的资源分配 2017/8/3 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone 基于 mesos 的容器调度框架 http://go-talks.appspot.com/github.com/huangnauh/slides/upone.slide#3 27/36 raft 可视化 Image generated by RaftScope (https://raft.github.io/raftscope/index.html) 2017/8/3 基于 mesos 的容器调度框架0 码力 | 36 页 | 2.49 MB | 1 年前3
Go 入门指南(The way to Go)到目前为止,我们看到的都是 Go 程序都是从 main() 函数开始执行,然后按顺序执行该函数体中的代码。 但我们经常会需要只有在满足一些特定情况时才执行某些代码,也就是说在代码里进行条件判断。针对这 种需求,Go 提供了下面这些条件结构和分支结构: if-else 结构 switch 结构 select 结构,用于 channel 的选择(第 14.4 节) 可以使用迭代或循环结构来重复执行一次或多次某段代码(任务): 如果想要重复执行某些语句,Go 语言中您只有 for 结构可以使用。不要小看它,这个 for 结构比其它语 言中的更为灵活。 注意事项 其它许多语言中也没有发现和 do while 完全对等的 for 结构,可能是因为这种需求并不是那么 强烈。 5.4.1 基于计数器的迭代 文件 for1.go 中演示了最简单的基于计数器的迭代,基本形式为: for 初始化语句; 条件语句; 修饰语句 {} 示例 5.6 for1 goto 会很快导致意大利面条式的代码,所以不应当使用而选择更好的替代方案。 特别注意 使用标签和 goto 语句是不被鼓励的:它们会很快导致非常糟糕的程序设计,而且总有更加可读 的替代方案来实现相同的需求。 一个建议使用 goto 语句的示例会在第 15.1 章的 simple_tcp_server.go 中出现:示例中在发生读取错误 时,使用 goto 来跳出无限读取循环并关闭相应的客户端链接。0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)到目前为止,我们看到的都是 Go 程序都是从 main() 函数开始执行,然后按顺序执行该函数体中的代码。但我们 经常会需要只有在满足一些特定情况时才执行某些代码,也就是说在代码里进行条件判断。针对这种需求,Go 提供了 下面这些条件结构和分支结构: if-else 结构 switch 结构 select 结构,用于 channel 的选择(第 14.4 节) 可以使用迭代或循环结构来重复执行一次或多次某段代码(任务): 如果想要重复执行某些语句,Go 语言中您只有 for 结构可以使用。不要小看它,这个 for 结构比其它语言中的更 为灵活。 注意事项 其它许多语言中也没有发现和 do while 完全对等的 for 结构,可能是因为这种需求并不是那么强烈。 文件 for1.go 中演示了最简单的基于计数器的迭代,基本形式为: 1. for 初始化语句; 条件语句; 修饰语句 {} 示例 5.6 for1.go: 1. package goto 会很快导致意大利面条式的代码,所以不应当使用而选择更好的替代方案。 特别注意 使用标签和 goto 语句是不被鼓励的:它们会很快导致非常糟糕的程序设计,而且总有更加可读的替代方 案来实现相同的需求。 一个建议使用 goto 语句的示例会在第 15.1 章的 simple_tcp_server.go 中出现:示例中在发生读取错误 时,使用 goto 来跳出无限读取循环并关闭相应的客户端链接。0 码力 | 466 页 | 4.44 MB | 1 年前3
2.游戏战中陪伴助手微服务架构设计与应用别再打架啦,我们装 备不佳,先去躲躲吧 战中陪伴助手介绍——和平精英最佳第五人 • 游戏战斗中指导 / 建议 • 闲聊、鼓励、攻略 • 取得战绩,赞赏一波 毫不留情! 三杀收下! 早期探索 第二部分 需求思考 • 我们的输入是什么? • 游戏对局事件 • Snapshot • Diffs • 玩家位置 • 安全区 • 航线 • …… • 掉血10点 • 开枪3发 • 敌人方位 初始方案——Lua 脚本 符合直觉的第一个方案 初始方案——Lua 脚本 如何新增策略 初始方案——Lua 脚本 如何修改策略 初始方案——Lua 方案 显而易见的问题 范畴 问题 需求 - 所有策略需求都需要走开发流程 - 迭代周期长:2周开发、测试、上线 运营 - 变更困难,修改策略 = 修改代码 开发 - 代码低内聚,交接难度大 扩展 - 没有考虑扩展 功能 - 难以实现战略推荐 成果——运营效能大大提升 降本增效 分类 早期方案 Token 方案 需求迭代模式 重开发、重运营 轻开发、重运营 新需求流程 需求 -> 开发 -> 运营 需求 -> (开发) -> 运营 需求变更流程 需求 -> 开发 -> 运营 需求 -> 运营 策略设计模式 人工设计 人工设计 + 离线挖掘 需求迭代周期 2 周 3~5 天 常驻人力 运营 1、开发 1、项目管理 0.50 码力 | 47 页 | 11.10 MB | 1 年前3
共 42 条
- 1
- 2
- 3
- 4
- 5













