Node 的设计错误Node 的设计错误 Ryan Dahl JS Conf 柏林林 2018.06 背景: 1. 基于最初的开发,我创建了了并管理理 Node。 2. 我的主要关注⽬目标是事件驱动的 HTTP server。 3. 这⼀一主要⽬目标对当时服务器器端的 JavaScript 起着关键作⽤用。即使在当时这⼀一点不不 那么明显,但是服务器器端 JS 的成功需要事件循环的助⼒力力。 ⽤用它进⾏行行快速的⼀一次性计算。 ⽽而 JavaScript 就是最好的动态语⾔言。 但是相反,现在我将会抱怨 Node 的所有缺点。 当你是某个项⽬目的负责⼈人时,你总是很难发现其中的错误。 有时 Node 对我来说就像是板上钉钉的事。 它本来可以更更好。 遗憾:不不遵守“诺⾔言” • 我在 2009 年年 6 ⽉月向 Node 添加了了 Promise,但在 2010 年年 ⽤用户可以选择通过标志访问:--allow-net --allow-write 这允许⽤用户运⾏行行不不可信的实⽤用程序(例例如就像⼀一个 linter) • 不不允许任意本地函数绑定到V8中 所有的系统调⽤用都是通过消息传递完成的(原BoFF序列列化) 有两个本地函数: send 和 rev。 这既简化了了设计,⼜又使系统更更易易于审核。 Deno ⽬目标:简化模块系统 • 没有试图与现有 Node0 码力 | 28 页 | 767.84 KB | 1 年前3
Go在工程实践的错误处理Golang在工程实践中的错误处理 彭友顺 石墨文档 产研负责人 目 录 为什么我们处理错误会这么慢 01 如何完善错误信息 02 优雅处理错误信息 03 分布式错误处理 04 错误信息手册的必要性 05 为什么我们处理错误 会这么慢 第一部分 错误信息不够完善 why 原因 出现 错误 定位 慢 恢复 慢 效率低 为什么我们处理错误会这么慢 错误处理不够优雅 分布式错误难以串联 分布式错误难以串联 错误信息难以识别 如何完善错误信息 第二部分 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 gRPC错误日志:param error 哪个Client 调用? 哪一行代码 调用? 我的 参数问题? 对方的问题? ... 遇到一个问题,我们就追加一个日志字段,排查错误效率非常低 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 对端信息 header 里的 metadata 响应的数据,包括 header 里的 metadata 错误码和错误信息 请求到响应的耗时时间 调用处执行的行号 总结起来,调试阶段需要对接的信息 为什么调试慢?-- 错误信息 高亮信息 封装组件 充足信息 • 在调试阶段,日志用红色高亮错误 • 肉眼才能最快的定位到error日志 • 利用IDE规则,直接点开代码执行行号,跳到指定的代码位置0 码力 | 30 页 | 3.11 MB | 1 年前3
基于gRPC go实现消息发布订阅使用gRPC go实现 基于Topic的高效消息订阅发布模型 姓名 张凯 中国电子云 目 录 gRPC go 介绍 01 gRPC四种通信模式及落地场景 02 根据proto生成go桩代码 03 订阅者动态注册 04 发布者消息推送 05 现场案例演示 06 gRPC go介绍 gRPC是什么? 01. 副标题 开篇思考几个问题 01. 副标题 gRPC介绍 Web开发 基于通信模式如何落地? 01. 副标题 流式传输 基于通信模式如何落地? 01. 副标题 以及,本次分享的 “ ” 基于Topic消息发布订阅 基于Topic的消息发布模型简介 01. 副标题 基于Topic的消息发布模型简介 01. 副标题 BRIAN KERNGHAN service PubSubService { rpc Publish(PublishRequest) 根据Proto生成桩代码 01. 副标题 protoc --go-grpc_out=. --go_out=. pubsub.proto protoc: 这是 Protocol Buffers 编译器的执行命令。 --go-grpc_out=.: 这个选项指定了输出 gRPC 相关的 Go 语言代码的目标目录,. 表示当前目录。protoc-gen-go- grpc 插件将会处理 .proto0 码力 | 31 页 | 2.42 MB | 1 年前3
电商消息系统架构演进&mdash0 码力 | 22 页 | 12.22 MB | 1 年前3
KCL: Rust 在编译器领域的实践与探索第三届中国Rust开发者大会 KCL: Rust 在编译器领域的实践与探索 张正 蚂蚁集团 Agenda 01 KusionStack 与 KCL 02 用 Rust 重写 KCL 03 Rust 重写后的收益 04 更多的探索 01 KusionStack 与 KCL KusionStack是什么? KusionStack架构 KCL KusionStack 是什么? Language Server KCL Compiler KCL Package Manager 02 用 Rust 重写 KCL Python 代码翻译 栈式虚拟机 Rust 编译器 KCL 编译器架构升级 Source Code AST LLVM IR Native/WASM Source Code AST Bit code VM Source Code Python Python code Pros Cons 简单易上手 生态丰富 研发效率高 性能问题 无法满足自动化系统需求 稳定性问题 None 空对象,属性不存在等运行时错误 我们遇到了哪些问题? 1. Go, Python, Rust 性能对比 为什么选择 Rust? > https://github.com/Peefy/StackMachine CPython0 码力 | 25 页 | 3.50 MB | 1 年前3
基于amqp实现的golang消息队列MaxQ7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 1/22 基于amqp实现的golang消息队列 MaxQ 2017-07-01 张培培 饿了么-基础框架组 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 2. IPC消息队列 3. AMQP协议 4. MaxQ架构模型 5. MaxQ相关特性 6. 使用场景和案例 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 3/22 1. 队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ 生产者消费者 通信方式 存储方式 堆积能力 消息可靠性 生产消费关系 Pull/Push 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.168.10.11:3999/maxq.slide#1 5/22 2. IPC消息队列 跟消息队列相比,有哪些共性? 7/1/2017 基于amqp实现的golang消息队列MaxQ http://192.1680 码力 | 22 页 | 1.45 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化从汇编角度看编译器优化 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++ ,后半段主要介绍并行编程与优化。 1 1.课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 cpu 缓存机制 4GB 限制外,也有一定性能优势。 8 位, 16 位, 32 位, 64 位版本 al, ax, eax, rax r15b, r15w, r15d, r15 AT&T 汇编语言 GCC 编译器所生成的汇编语言就属于这种 返回值:通过 eax 传出 movl $42, %eax 相当于: eax = 42; 前 6 个参数:分别通过 edi , esi , edx , ecx , r8d0 码力 | 108 页 | 9.47 MB | 1 年前3
大型Web项目可用性提升 零脚本错误的实战 郭林烁 2017.100 码力 | 62 页 | 7.09 MB | 1 年前3
Rust 语言学习笔记57 5.2.2 依赖的详细配置: ................................................................ 58 5.2.3 自定义编译器配置 ................................................................ 58 5.2.4 feature 段落.......... .. 92 7.1.4 线程与 move闭包 ................................................................ 93 7.2 消息传递 .................................................................................... 93 7.2.1 通道与所有权的转移 96 7.2.4 异步通道与同步通道 ............................................................. 97 7.2.5 可发送的消息类型 ................................................................ 99 7.3 send 与 sync...........0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9. 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 9.1. 用 panic! 处理不可恢复的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 9.2. 用 Result 处理可恢复的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 12.3. 重构以改进模块化与错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 562 页 | 3.23 MB | 28 天前3
共 475 条
- 1
- 2
- 3
- 4
- 5
- 6
- 48













