 Service Mesh 在蚂蚁金服生产级安全实践2019.8.11 Service Mesh Meetup #6 广州站基于 Secret Discovery Service Sidecar 的证书管理方案 使用可信身份服务构建敏感数据下发通道 Service Mesh Sidecar 的 TLS 生产级落地实践 分享内容基于 Secret Discovery Service Sidecar 的证书管理方案 Kubernetes Secret 对接内部密钥管理系统  使用 AppLocalToken 替换 Service Account  支持多种Sidecar 通过Citadel Agent 获取证书使用可信身份服务构建敏感数据下发通道 背景介绍 通过应用Pod 中增加一个安全 Sidecar,以API接口的形式为APP及其他Sidecar 提供基础的身 份颁发、身份验证功能  解耦应用的业务逻辑与认证授权逻辑,减少开发量; 全网统一的认证授权方式,去凭证,减少攻击面;  为每个应用建立唯一的全局应用身份标识,提供服务调用全链路溯源能力,及可问责能 力(accountability)。使用可信身份服务构建敏感数据下发通道 身份获取  应用 A 构造 HTTP 请求,调用 安全Sidecar 提供的 JWT-SVID 颁发接口获取 JWT-SVID。  安全Sidecar 通过 Downward API 获取0 码力 | 19 页 | 808.60 KB | 6 月前3 Service Mesh 在蚂蚁金服生产级安全实践2019.8.11 Service Mesh Meetup #6 广州站基于 Secret Discovery Service Sidecar 的证书管理方案 使用可信身份服务构建敏感数据下发通道 Service Mesh Sidecar 的 TLS 生产级落地实践 分享内容基于 Secret Discovery Service Sidecar 的证书管理方案 Kubernetes Secret 对接内部密钥管理系统  使用 AppLocalToken 替换 Service Account  支持多种Sidecar 通过Citadel Agent 获取证书使用可信身份服务构建敏感数据下发通道 背景介绍 通过应用Pod 中增加一个安全 Sidecar,以API接口的形式为APP及其他Sidecar 提供基础的身 份颁发、身份验证功能  解耦应用的业务逻辑与认证授权逻辑,减少开发量; 全网统一的认证授权方式,去凭证,减少攻击面;  为每个应用建立唯一的全局应用身份标识,提供服务调用全链路溯源能力,及可问责能 力(accountability)。使用可信身份服务构建敏感数据下发通道 身份获取  应用 A 构造 HTTP 请求,调用 安全Sidecar 提供的 JWT-SVID 颁发接口获取 JWT-SVID。  安全Sidecar 通过 Downward API 获取0 码力 | 19 页 | 808.60 KB | 6 月前3
 Comprehensive Rust(简体中文) 202412. . . . . . . . . . . . . . . . . . . 308 59 通道 310 59.1 无界通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 59.2 有界通道 . . . . . . . . . . . . . . . . . . . . . . . 63.4 任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 63.5 异步通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 64 Futures Control unsafe impl Send for Rtc {} 304 第 XIII 章 并发:上午 305 第 57 部分 欢迎了解 Rust 中的并发 Rust 完全支持使用带有互斥锁和通道的操作系统线程进行并发。 Rust 类型系统能帮助我们把许多并发 bug 转换为编译期 bug 发挥着重要作用。这通常称为“无畏并发”, 因为你可以依靠编译器来确保运行时的正确性。 • Rust0 码力 | 359 页 | 1.33 MB | 10 月前3 Comprehensive Rust(简体中文) 202412. . . . . . . . . . . . . . . . . . . 308 59 通道 310 59.1 无界通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 59.2 有界通道 . . . . . . . . . . . . . . . . . . . . . . . 63.4 任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 63.5 异步通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 64 Futures Control unsafe impl Send for Rtc {} 304 第 XIII 章 并发:上午 305 第 57 部分 欢迎了解 Rust 中的并发 Rust 完全支持使用带有互斥锁和通道的操作系统线程进行并发。 Rust 类型系统能帮助我们把许多并发 bug 转换为编译期 bug 发挥着重要作用。这通常称为“无畏并发”, 因为你可以依靠编译器来确保运行时的正确性。 • Rust0 码力 | 359 页 | 1.33 MB | 10 月前3
 Nacos架构&原理
总体设计 17 Nacos 架构 17 Nacos 配置模型 21 Nacos 内核设计 28 Nacos ⼀致性协议 28 Nacos 自研 Distro 协议 38 Nacos 通信通道 42 Nacos 寻址机制 56 Nacos 服务发现模块 63 Nacos 注册中心的设计原理 63 Nacos 注册中心服务数据模型 80 Nacos 健康检查机制 89 Nacos 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。  寻址模式:解决 Server IP 直连,域名访问,Nameserver 寻址、广播等多种寻址模式,需要可 扩展。  推送通道:解决 Server 与存储、Server 间、Server 与 SDK 间高效通信问题。  容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。  流量管理:按照租户,分 面的服务 信息的状态都能够及时地通知其他节点,可以维持数十万量级服务实例的存储和⼀致性。 Nacos 架构 < 42 Nacos 通信通道 Nacos 长链接 ⼀、现状背景 Nacos 1.x 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的。 产品 推送模型 数据⼀致性 痛点 说明 Nacos Config 异步 Servlet 基于 MD5 比0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
总体设计 17 Nacos 架构 17 Nacos 配置模型 21 Nacos 内核设计 28 Nacos ⼀致性协议 28 Nacos 自研 Distro 协议 38 Nacos 通信通道 42 Nacos 寻址机制 56 Nacos 服务发现模块 63 Nacos 注册中心的设计原理 63 Nacos 注册中心服务数据模型 80 Nacos 健康检查机制 89 Nacos 通知数据,通过统⼀的模式回调用户处理。接口和数据结构需要具备可扩展性。  寻址模式:解决 Server IP 直连,域名访问,Nameserver 寻址、广播等多种寻址模式,需要可 扩展。  推送通道:解决 Server 与存储、Server 间、Server 与 SDK 间高效通信问题。  容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性。  流量管理:按照租户,分 面的服务 信息的状态都能够及时地通知其他节点,可以维持数十万量级服务实例的存储和⼀致性。 Nacos 架构 < 42 Nacos 通信通道 Nacos 长链接 ⼀、现状背景 Nacos 1.x 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的。 产品 推送模型 数据⼀致性 痛点 说明 Nacos Config 异步 Servlet 基于 MD5 比0 码力 | 326 页 | 12.83 MB | 9 月前3
 蚂蚁金服网络代理演进之路灵活弹性 安全合规 防攻击蚂蚁金服网络接入十年变迁 2010年前部署商用设备 前世 01 2010 开始网络代理白盒 化,定制业务逻辑,软 硬件一体解决方案 自研 02 2015 年无线通道协议,安 全升级, 连接收编 All in 无线 03 PC时代 移动时代 万物互联云原生时代 2018 年协议,安全持续升 级(QUIC,MQTT,国密), 云原生 再启程 03前世 全面实践全网https 2012 • 首次全流量支撑双十一大促 2013 • 支持蚂蚁LDC架构,三地五中心容灾架构 • 全面上线SSL加速卡,提供软硬件一体加速方案 2015 • All in 无线,通信通道全面升级(MMTP,MTLS协议) 2016 • 安全防护能力提升,WAF,流量镜像 2018至 今 • 通信协议,架构,安全再次升级(物联终端接入,QUIC协议,国密,可信计算, 海外 国际支付咻一咻与敬业福咻一咻的挑战 亿级用户快速进入 亿级用户同时点击 剩余红包实时显示无线移动网络优化 § 统一通道:主长连接 + 短连接 § 统一协议:MTLS+MMTP § 统一调度:MobileDC 最优调度 网络探测 连接建立 传输+保持 通道复用 复合建连 握手优化 短连补偿 智能心跳 数据压缩 质量模型 自动重试 云端补偿 柔性建连 假连淘汰 动态超时0 码力 | 46 页 | 19.93 MB | 6 月前3 蚂蚁金服网络代理演进之路灵活弹性 安全合规 防攻击蚂蚁金服网络接入十年变迁 2010年前部署商用设备 前世 01 2010 开始网络代理白盒 化,定制业务逻辑,软 硬件一体解决方案 自研 02 2015 年无线通道协议,安 全升级, 连接收编 All in 无线 03 PC时代 移动时代 万物互联云原生时代 2018 年协议,安全持续升 级(QUIC,MQTT,国密), 云原生 再启程 03前世 全面实践全网https 2012 • 首次全流量支撑双十一大促 2013 • 支持蚂蚁LDC架构,三地五中心容灾架构 • 全面上线SSL加速卡,提供软硬件一体加速方案 2015 • All in 无线,通信通道全面升级(MMTP,MTLS协议) 2016 • 安全防护能力提升,WAF,流量镜像 2018至 今 • 通信协议,架构,安全再次升级(物联终端接入,QUIC协议,国密,可信计算, 海外 国际支付咻一咻与敬业福咻一咻的挑战 亿级用户快速进入 亿级用户同时点击 剩余红包实时显示无线移动网络优化 § 统一通道:主长连接 + 短连接 § 统一协议:MTLS+MMTP § 统一调度:MobileDC 最优调度 网络探测 连接建立 传输+保持 通道复用 复合建连 握手优化 短连补偿 智能心跳 数据压缩 质量模型 自动重试 云端补偿 柔性建连 假连淘汰 动态超时0 码力 | 46 页 | 19.93 MB | 6 月前3
 Comprehensive Rust(繁体中文). . . . . . . . . . . . . . . . . . . 308 59 通道 310 59.1 無界限的通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 59.2 有界限的通道 . . . . . . . . . . . . . . . . . . . . . . . unsafe impl Send for Rtc {} 304 第 XIII 章 並行:上午 305 第 57 部分 歡迎使用 Rust 的並行程式設計 Rust 使用 OS 執行緒搭配著互斥鎖和通道來完整支援並行處理。 在將許多執行期並行錯誤轉換為編譯期錯誤的過程中,Rust 型別系統扮演了重要角色。這通常稱為「無 懼並行」,因為你可以依賴編譯器,確保執行期能夠正確運作。 • Rust lets 資料。 • 適用 Rust 一般借用規則:可以由一個執行緒以可變方式借用,或者由任意數量的執行緒以不可變 方式借用。 309 第 59 部分 通道 Rust 通道分為兩個部分:Sender Comprehensive Rust(繁体中文). . . . . . . . . . . . . . . . . . . 308 59 通道 310 59.1 無界限的通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 59.2 有界限的通道 . . . . . . . . . . . . . . . . . . . . . . . unsafe impl Send for Rtc {} 304 第 XIII 章 並行:上午 305 第 57 部分 歡迎使用 Rust 的並行程式設計 Rust 使用 OS 執行緒搭配著互斥鎖和通道來完整支援並行處理。 在將許多執行期並行錯誤轉換為編譯期錯誤的過程中,Rust 型別系統扮演了重要角色。這通常稱為「無 懼並行」,因為你可以依賴編譯器,確保執行期能夠正確運作。 • Rust lets 資料。 • 適用 Rust 一般借用規則:可以由一個執行緒以可變方式借用,或者由任意數量的執行緒以不可變 方式借用。 309 第 59 部分 通道 Rust 通道分為兩個部分:Sender- 和 Receiver - 。這兩個部分透過通道相連,但你只能看到端 點。 use std::sync::mpsc; fn main() { let (tx, rx) = mpsc::channel(); 0 码力 | 358 页 | 1.41 MB | 10 月前3
 Python 标准库参考指南 3.6.15 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不会传播到更高层级 的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 forkserver 启动方法启动的进程。 想要使用特定启动方法的库应该使用get_context() 以避免干扰库用户的选择。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): (下页继续)0 码力 | 1886 页 | 8.95 MB | 9 月前3 Python 标准库参考指南 3.6.15 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不会传播到更高层级 的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 forkserver 启动方法启动的进程。 想要使用特定启动方法的库应该使用get_context() 以避免干扰库用户的选择。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): (下页继续)0 码力 | 1886 页 | 8.95 MB | 9 月前3
 Python 标准库参考指南 3.6.15 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不会传播到更高层级 的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 forkserver 启动方法启动的进程。 想要使用特定启动方法的库应该使用get_context() 以避免干扰库用户的选择。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): (下页继续)0 码力 | 1886 页 | 8.95 MB | 9 月前3 Python 标准库参考指南 3.6.15 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不会传播到更高层级 的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 forkserver 启动方法启动的进程。 想要使用特定启动方法的库应该使用get_context() 以避免干扰库用户的选择。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): (下页继续)0 码力 | 1886 页 | 8.95 MB | 9 月前3
 Python 标准库参考指南 3.7.13 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不会传播到更高层级 的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 722 Chapter 17. 并发执行 The Python Library Reference, 发布 3.7.13 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): q.put([420 码力 | 1961 页 | 9.14 MB | 9 月前3 Python 标准库参考指南 3.7.13 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不会传播到更高层级 的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 722 Chapter 17. 并发执行 The Python Library Reference, 发布 3.7.13 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): q.put([420 码力 | 1961 页 | 9.14 MB | 9 月前3
 Python 标准库参考指南 3.7.13 实现方式,但 其最坏的情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其 大小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常 重要的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全 部有用内存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍 记录器的有效级别。 propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不 会传播到更高层级的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日 志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 (例如,有类似 PyInstaller 和 cx_Freeze 的包产生的二进制文件)。'fork' 启动方法可以使用。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): q.put([420 码力 | 1846 页 | 9.09 MB | 9 月前3 Python 标准库参考指南 3.7.13 实现方式,但 其最坏的情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其 大小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常 重要的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全 部有用内存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍 记录器的有效级别。 propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理程序,设为 0 表示消息 不 会传播到更高层级的处理程序。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日 志记录器所用的名称。 指定处理程序配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 (例如,有类似 PyInstaller 和 cx_Freeze 的包产生的二进制文件)。'fork' 启动方法可以使用。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): q.put([420 码力 | 1846 页 | 9.09 MB | 9 月前3
 Python 标准库参考指南 3.8.20 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 该日志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理器,设为 0 表示消息 不会传播到更高层级 的处理器。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理器配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 上和“冻结的”可执行内容一同使用(例 如,有类似 PyInstaller 和 cx_Freeze 的包产生的二进制文件)。'fork' 启动方法可以使用。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): (下页继续)0 码力 | 2052 页 | 9.74 MB | 9 月前3 Python 标准库参考指南 3.8.20 实现方式,但其最坏的 情况却可能非常糟糕。 堆在大磁盘排序中也非常有用。你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大 小通常与 CPU 内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙1。非常重要 的一点是初始排序应产生尽可能长的运行轮次。锦标赛模式是达成此目标的好办法。如果你使用全部有用内 存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的 该日志记录器的有效级别。propagate 条目设为 1 表示消息必须从此日志记录器传播到更高层级的处理器,设为 0 表示消息 不会传播到更高层级 的处理器。qualname 条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。 指定处理器配置的小节说明如下。 [handler_hand01] class=StreamHandler level=NOTSET formatter=form01 上和“冻结的”可执行内容一同使用(例 如,有类似 PyInstaller 和 cx_Freeze 的包产生的二进制文件)。'fork' 启动方法可以使用。 在进程之间交换对象 multiprocessing 支持进程之间的两种通信通道: 队列 Queue 类是一个近似queue.Queue 的克隆。例如: from multiprocessing import Process, Queue def f(q): (下页继续)0 码力 | 2052 页 | 9.74 MB | 9 月前3
共 33 条
- 1
- 2
- 3
- 4













