持久内存编程
①全新正版,现货速发,7天无理由退换货②天津、成都、无锡、广东等多仓就近发货,订单最迟48小时内发出③无法指定快递④可开电子发票,不清楚的请咨询客服。
¥
83.65
7.0折
¥
119
全新
库存2件
作者[美]史蒂夫·斯卡格尔(SteveScargall)
出版社机械工业出版社
ISBN9787111676744
出版时间2021-04
装帧平装
开本16开
定价119元
货号31121778
上书时间2024-10-14
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
目录
译者序<br/>前言<br/>致谢<br/>作者简介<br/>贡献者简介<br/>技术评审者简介<br/>译者简介<br/>第1章 持久内存编程简介 1<br/>1.1 高级示例程序 2<br/>1.1.1 有何区别 4<br/>1.1.2 性能差异 5<br/>1.1.3 程序复杂性 5<br/>1.1.4 libpmemkv如何运行 5<br/>1.2 后文提要 6<br/>1.3 总结 7<br/>第2章 持久内存架构 8<br/>2.1 持久内存的特性 8<br/>2.2 持久内存的平台支持 9<br/>2.3 缓存层级 10<br/>2.4 电源故障保护域 11<br/>2.5 刷新、排序和屏障操作的需求 13<br/>2.6 数据可见性 16<br/>2.7 用于持久内存的英特尔机器指令 16<br/>2.8 检测平台功能 17<br/>2.9 应用程序启动与恢复 18<br/>2.10 后文提要 20<br/>2.11 总结 20<br/>第3章 持久内存的操作系统支持 21<br/>3.1 内存和存储的操作系统支持 21<br/>3.2 持久内存用作块存储 22<br/>3.3 持久内存感知型文件系统 23<br/>3.4 内存映射文件 24<br/>3.5 持久内存直接访问 30<br/>3.6 总结 37<br/>第4章 持久内存编程的基本概念 38<br/>4.1 有何区别 38<br/>4.2 原子更新 39<br/>4.3 事务 39<br/>4.3.1 原子性 39<br/>4.3.2 一致性 40<br/>4.3.3 隔离性 40<br/>4.3.4 持久性 40<br/>4.4 刷新不具有事务性 41<br/>4.5 启动时职责 41<br/>4.6 针对硬件配置进行调优 41<br/>4.7 总结 42<br/>第5章 持久内存开发套件简介 43<br/>5.1 背景 43<br/>5.2 选择正确的语义 44<br/>5.3 易失性库 44<br/>5.3.1 libmemkind 44<br/>5.3.2 libvmemcache 45<br/>5.3.3 libvmem 46<br/>5.4 持久性库 46<br/>5.4.1 libpmem 46<br/>5.4.2 libpmemobj 46<br/>5.4.3 libpmemobj-cpp 47<br/>5.4.4 libpmemkv 47<br/>5.4.5 libpmemlog 47<br/>5.4.6 libpmemblk 48<br/>5.5 工具和命令程序 48<br/>5.5.1 pmempool 48<br/>5.5.2 pmemcheck 48<br/>5.5.3 pmreorder 49<br/>5.6 总结 49<br/>第6章 libpmem:底层持久内存支持 50<br/>6.1 使用库 51<br/>6.2 映射文件 51<br/>6.3 复制到持久内存 52<br/>6.4 分解刷新步骤 53<br/>6.5 总结 54<br/>第7章 libpmemobj:原生事务性对象存储 55<br/>7.1 什么是libpmemobj 55<br/>7.2 为什么不使用malloc() 55<br/>7.3 组合操作 56<br/>7.4 内存池 56<br/>7.4.1 创建内存池 56<br/>7.4.2 池对象指针和根对象 59<br/>7.4.3 打开内存池并从内存池中读取数据 60<br/>7.5 内存池集 61<br/>7.5.1 串联池集 61<br/>7.5.2 副本池集 62<br/>7.6 管理内存池和池集 62<br/>7.7 类型化对象标识符 63<br/>7.8 分配内存 63<br/>7.9 持久保存数据 63<br/>7.9.1 原子操作 64<br/>7.9.2 保留/发布API 66<br/>7.9.3 事务API 68<br/>7.9.4 可选标记 71<br/>7.9.5 持久保存数据总结 71<br/>7.10 libpmemobj的API可提供保障 71<br/>7.11 管理库操作 72<br/>7.12 调试与错误处理 72<br/>7.13 总结 74<br/>第8章 libpmemobj-cpp:自适应语言C++和持久内存 75<br/>8.1 简介 75<br/>8.2 元编程 75<br/>8.2.1 持久指针 76<br/>8.2.2 事务 76<br/>8.2.3 创建快照 77<br/>8.2.4 分配 79<br/>8.3 C++标准限制 80<br/>8.3.1 对象的生命周期 80<br/>8.3.2 平凡类型 81<br/>8.3.3 对象布局 82<br/>8.3.4 指针 83<br/>8.3.5 限制总结 85<br/>8.4 简化持久性 85<br/>8.5 生态系统 91<br/>8.5.1 持久容器 91<br/>8.5.2 持久容器示例 91<br/>8.6 总结 94<br/>第9章 pmemkv:持久内存键值存储 95<br/>9.1 pmemkv架构 97<br/>9.2 电话簿示例 99<br/>9.3 让持久内存更靠近云 102<br/>9.4 总结 103<br/>第10章 持久内存编程的易失性用途 104<br/>10.1 简介 104<br/>10.2 背景 105<br/>10.2.1 内存分配 105<br/>10.2.2 工作原理 105<br/>10.2.3 支持的内存“类型” 105<br/>10.3 memkind API 107<br/>10.3.1 类型管理API 107<br/>10.3.2 堆管理API 111<br/>10.3.3 类型配置管理 112<br/>10.3.4 更多memkind代码示例 113<br/>10.4 面向PMEM类型的C++分配器 113<br/>10.4.1 pmem::allocator方法 114<br/>10.4.2 嵌套容器 114<br/>10.5 C++示例 114<br/>10.5.1 使用pmem::allocator 115<br/>10.5.2 创建字符串向量 115<br/>10.6 使用持久内存扩展易失性内存 116<br/>10.7 libvmemcache:面向大容量持久内存的高效易失性键值缓存 120<br/>10.7.1 libvmemcache概述 120<br/>10.7.2 libvmemcache设计 122<br/>10.7.3 使用libvmemcache 124<br/>10.8 总结 126<br/>第11章 设计适用于持久内存的数据结构 127<br/>11.1 连续数据结构和碎片化 127<br/>11.1.1 内部和外部碎片化 127<br/>11.1.2 原子性和一致性 128<br/>11.1.3 选择性持久化 131<br/>11.1.4 示例数据结构 131<br/>11.2 总结 140<br/>第12章 调试持久内存应用程序 141<br/>12.1 用于Valgrind的pmemcheck 142<br/>12.1.1 栈溢出示例 142<br/>12.1.2 内存泄漏示例 143<br/>12.2 Intel Inspector?—?Persistence Inspector 144<br/>12.2.1 栈溢出示例 144<br/>12.2.2 内存泄漏示例 145<br/>12.3 常见的持久内存编程问题 146<br/>12.3.1 非持久存储 146<br/>12.3.2 数据存储未添加到事务 157<br/>12.3.3 将一个内存对象添加至两个不同的事务 160<br/>12.3.4 内存覆写 165<br/>12.3.5 非必要刷新 166<br/>12.3.6 乱序写入 170<br/>12.4 总结 179<br/>第13章 实际应用程序中实现持久性 180<br/>13.1 数据库示例 180<br/>13.2 不同的持久内存实现方式 181<br/>13.3 开发持久内存感知型MariaDB*存储引擎 181<br/>13.3.1 了解存储层 182<br/>13.3.2 创建存储引擎类 183<br/>13.4 总结 191<br/>第14章 并发和持久内存 192<br/>14.1 事务与多线程 192<br/>14.2 持久内存上的互斥体 196<br/>14.3 原子操作与持久内存 198<br/>14.4 持久内存的并发数据结构 198<br/>14.4.1 并发有序映射 199<br/>14.4.2 并发散列映射 202<br/>14.5 总结 202<br/>第15章 分析与性能 204<br/>15.1 简介 204<br/>15.2 性能分析概念 204<br/>15.2.1 计算受限与内存受限 204<br/>15.2.2 内存延时与内存容量 205<br/>15.2.3 读取与写入性能 205<br/>15.2.4 内存访问模式 205<br/>15.2.5 I/O存储受限的工作负载 205<br/>15.3 确定工作负载是否适合持久内存 206<br/>15.3.1 易失性用例 206<br/>5.3.2 需要持久性的用例 208<br/>15.4 使用持久内存的工作负载性能分析 209<br/>15.4.1 确定工作负载特性 210<br/>15.4.2 内存带宽与延时 210<br/>15.4.3 持久内存读写比率 211<br/>15.4.4 工作集大小与内存占用空间大小 211<br/>15.4.5 非一致内存架构行为 211<br/>15.4.6 优化面向持久内存的软件 212<br/>15.5 总结 215<br/>第16章 PMDK内部组件:重要算法和数据结构 216<br/>16.1 持久内存池:高层架构概览 216<br/>16.2 内存映射的不确定性:持久内存对象标识符 218<br/>16.3 持久化线程本地存储:使用通道 220<br/>16.4 确保电源故障原子性:重做日志和撤销日志 220<br/>16.4.1 事务重做日志 221<br/>16.4.2 事务撤销日志 221<br/>16.4.3 libpmemobj统一日志 222<br/>16.5 持久分配:事务持久分配器的接口 223<br/>16.6 持久内存堆管理:持久内存分配器设计 223<br/>16.7 ACID事务:高效的底层持久事务 226<br/>16.8 延迟重新初始化变量:将易失性状态存储在持久内存上 227<br/>16.9 总结 228<br/>第17章 可靠性、可用性与可维护性 229<br/>17.1 处理不可纠正错误 229<br/>17.1.1 已使用的不可纠正错误处理 230<br/>17.1.2 未使用的不可纠正错误处理 231<br/>17.1.3 清除不可纠正错误 234<br/>17.2 设备状态 234<br/>17.2.1 ACPI定义的设备状态函数(_NCH,_NBS) 236<br/>17.2.2 特定供应商的设备状态(_DSM) 236<br/>17.2.3 ACPI NFIT状态事件通知 236<br/>17.3 不安全/异常关机 237<br/>17.4 总结 238<br/>第18章 远程持久内存 239<br/>18.1 RDMA网络协议 240<br/>18.2 初始远程持久内存架构的目标 242<br/>18.3 确保远程持久性 242<br/>18.3.1 通用远程复制方法 243<br/>18.3.2 设备远程复制方法 244<br/>18.4 一般软件架构 246<br/>18.5 librpmem架构及其在复制中的使用 246<br/>18.5.1 使用内存池集配置远程复制 249<br/>18.5.2 性能注意事项 249<br/>18.5.3 远程复制错误处理 250<br/>18.5.4 向复制世界“问好” 251<br/>18.6 总结 254<br/>第19章 高级主题 256<br/>19.1 非一致性内存访问 256<br/>19.1.1 NUMACTL Linux程序 257<br/>19.1.2 NDCTL Linux程序 258<br/>19.1.3 英特尔内存延迟检查器程序 259<br/>19.1.4 NUMASTAT程序 260<br/>19.1.5 英特尔VTune Profiler —Platform Profiler 261<br/>19.1.6 IPMCTL程序 261<br/>19.1.7 BIOS调优选项 261<br/>19.1.8 自动NUMA平衡 261<br/>19.2 使用具有持久内存的卷管理器 263<br/>19.3 mmap()的MAP_SYNC标记 264<br/>19.4 总结 265<br/>附录A 如何在Linux上安装NDCTL和DAXCTL 266<br/>附录B 如何安装持久内存开发套件 271<br/>附录C 如何在Linux和Windows上安装IPMCTL 277<br/>附录D 面向持久内存的Java 282<br/>附录E 远程持久内存复制的未来 289<br/>术语表 292
内容摘要
本书讲述了持久内存编程这项技术,以及它为什么受行业欢迎。其中涵盖了操作系统和硬件需求,以及如何使用模拟或真实的持久内存硬件创建开发环境。本书解释了基本概念,并介绍了C、C++、JavaScript和其他语言的持久内存编程API,讨论了持久内存上的RMDA,阐述了其安全特性。本书还包括可以在读者自己的系统上运行的源代码和示例。
— 没有更多了 —
以下为对购买帮助不大的评价