新書推薦:
《
迷人的化学(迷人的科学丛书)
》
售價:HK$
143.4
《
宋代冠服图志(详尽展示宋代各类冠服 精美插图 考据严谨 细节丰富)
》
售價:HK$
87.4
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
《
养育不好惹的小孩
》
售價:HK$
77.3
《
加加美高浩的手部绘画技法 II
》
售價:HK$
89.4
《
卡特里娜(“同一颗星球”丛书)
》
售價:HK$
87.4
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:HK$
188.2
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:HK$
132.2
|
內容簡介: |
本书以图解的方式通俗易懂的讲解计算机系统中各项技术的本质,包括编程语言的本质是什么、操作系统、进程线程协程等的本质是什么、到底什么是内存、什么是堆区栈区、内存分配等是怎么一回事、怎样从晶体管构建出CPU、I/O是如何实现的等等,从根源出发,一步步讲解一项技术到底是怎么来的,同时内容可视化——辅助大量精心设计的插图,几乎做到了平均一页有一图,把对技术的理解门槛降到。
|
關於作者: |
陆小风(@码农的荒岛求生),硕士毕业于北京航空航天大学计算机学院,先后就职于VMware和,具有多年软件系统研发经验,擅长用通俗易懂的语言讲解计算机技术。
|
目錄:
|
第 1 章 从编程语言到可执行程序,这是怎么一回事 / 11.1 假如你来发明编程语言 / 21.1.1 创世纪: CPU 是个聪明的笨蛋 / 31.1.2 汇编语言出现了 / 31.1.3 底层的细节 vs 高层的抽象 / 41.1.4 套路满满:高级编程语言的雏形 / 61.1.5 《盗梦空间》与递归:代码的本质 / 71.1.6 让计算机理解递归 / 91.1.7 优秀的翻译官:编译器 / 91.1.8 解释型语言的诞生 / 101.2 编译器是如何工作的 / 121.2.1 编译器就是一个普通程序,没什么大不了的 / 121.2.2 提取出每一个符号 / 131.2.3 token 想表达什么含义 / 141.2.4 语法树是不是合理的 / 141.2.5 根据语法树生成中间代码 / 151.2.6 代码生成 / 151.3 链接器不能说的秘密 / 161.3.1 链接器是如何工作的 / 171.3.2 符号决议:供给与需求 / 181.3.3 静态库、动态库与可执行文件 / 201.3.4 动态库有哪些优势及劣势 / 251.3.5 重定位:确定符号运行时地址 / 271.3.6 虚拟内存与程序内存布局 / 291.4 为什么抽象在计算机科学中如此重要 / 321.4.1 编程与抽象 / 321.4.2 系统设计与抽象 / 331.5 总结 / 34第 2 章 程序运行起来了,可我对其一无所知 / 352.1 从根源上理解操作系统、进程与线程 / 362.1.1 一切要从 CPU 说起 / 362.1.2 从 CPU 到操作系统 / 372.1.3 进程很好,但还不够方便 / 402.1.4 从进程演变到线程 / 412.1.5 多线程与内存布局 / 442.1.6 线程的使用场景 / 442.1.7 线程池是如何工作的 / 452.1.8 线程池中线程的数量 / 462.2 线程间到底共享了哪些进程资源 / 472.2.1 线程私有资源 / 472.2.2 代码区:任何函数都可放到线程中执行 / 492.2.3 数据区:任何线程均可访问数据区变量 / 492.2.4 堆区:指针是关键 / 502.2.5 栈区:公共的私有数据 / 502.2.6 动态链接库与文件 / 522.2.7 线程局部存储: TLS / 532.3 线程安全代码到底是怎么编写的 / 552.3.1 自由与约束 / 552.3.2 什么是线程安全 / 562.3.3 线程的私有资源与共享资源 / 572.3.4 只使用线程私有资源 / 582.3.5 线程私有资源 + 函数参数 / 582.3.6 使用全局变量 / 602.3.7 线程局部存储 / 612.3.8 函数返回值 / 622.3.9 调用非线程安全代码 / 632.3.10 如何实现线程安全代码 / 642.4 程序员应如何理解协程 / 652.4.1 普通的函数 / 652.4.2 从普通函数到协程 / 662.4.3 协程的图形化解释 / 682.4.4 函数只是协程的一种特例 / 692.4.5 协程的历史 / 692.4.6 协程是如何实现的 / 702.5 彻底理解回调函数 / 712.5.1 一切要从这样的需求说起 / 722.5.2 为什么需要回调 / 732.5.3 异步回调 / 742.5.4 异步回调带来新的编程思维 / 752.5.5 回调函数的定义 / 772.5.6 两种回调类型 / 782.5.7 异步回调的问题:回调地狱 / 792.6 彻底理解同步与异步 / 802.6.1 辛苦的程序员 / 802.6.2 打电话与发邮件 / 812.6.3 同步调用 / 832.6.4 异步调用 / 842.6.5 同步、异步在网络服务器中的应用 / 862.7 哦!对了,还有阻塞与非阻塞 / 912.7.1 阻塞与非阻塞 / 922.7.2 阻塞的核心问题: I/O / 922.7.3 非阻塞与异步 I/O / 932.7.4 一个类比:点比萨 / 942.7.5 同步与阻塞 / 952.7.6 异步与非阻塞 / 962.8 融会贯通:高并发、高性能服务器是如何实现的 / 972.8.1 多进程 / 972.8.2 多线程 / 982.8.3 事件循环与事件驱动 / 992.8.4 问题 1 :事件来源与 I/O 多路复用 / 1002.8.5 问题 2:事件循环与多线程 / 1012.8.6 咖啡馆是如何运作的: Reactor 模式 / 1022.8.7 事件循环与 I/O / 1032.8.8 异步与回调函数 / 1032.8.9 协程:以同步的方式进行异步编程 / 1062.8.10 CPU、线程与协程 / 1072.9 计算机系统漫游:从数据、代码、回调、闭包到容器、虚拟机 / 1082.9.1 代码、数据、变量与指针 / 1082.9.2 回调函数与闭包 / 1102.9.3 容器与虚拟机技术 / 1122.10 总结 / 114第 3 章 底层?就从内存这个储物柜开始吧 / 1153.1 内存的本质、指针及引用 / 1163.1.1 内存的本质是什么?储物柜、比特、字节与对象 / 1163.1.2 从内存到变量:变量意味着什么 / 1173.1.3 从变量到指针:如何理解指针 / 1203.1.4 指针的威力与破坏性:能力与责任 / 1223.1.5 从指针到引用:隐藏内存地址 / 1233.2 进程在内存中是什么样子的 / 1243.2.1 虚拟内存:眼见未必为实 / 1253.2.2 页与页表:从虚幻到现实 / 1253.3 栈区:函数调用是如何实现的 / 1273.3.1 程序员的好帮手:函数 / 1283.3.2 函数调用的活动轨迹:栈 / 1283.3.3 栈帧与栈区:以宏观的角度看 / 1303.3.4 函数跳转与返回是如何实现的 / 1313.3.5 参数传递与返回值是如何实现的 / 1333.3.6 局部变量在哪里 / 1343.3.7 寄存器的保存与恢复 / 1343.3.8 Big Picture:我们在哪里 / 1343.4 堆区:内存动态分配是如何实现的 / 1363.4.1 为什么需要堆区 / 1363.4.2 自己动手实现一个 malloc 内存分配器 / 1373.4.3 从停车场到内存管理 / 1383.4.4 管理空闲内存块 / 1393.4.5 跟踪内存分配状态 / 1413.4.6 怎样选择空闲内存块:分配策略 / 1423.4.7 分配内存 / 1443.4.8 释放内存 / 1463.4.9 高效合并空闲内存块 / 1493.5 申请内存时底层发生了什么 / 1503.5.1 三界与 CPU 运行状态 / 1503.5.2 内核态与用户态 / 1513.5.3 传送门:系统调用 / 1523.5.4 标准库:屏蔽系统差异 / 1533.5.5 堆区内存不够了怎么办 / 1543.5.6 向操作系统申请内存: brk / 1553.5.7 冰山之下:虚拟内存才是终极 BOSS / 1563.5.8 关于分配内存完整的故事 / 1563.6 高性能服务器内存池是如何实现的 / 1573.6.1 内存池 vs 通用内存分配器 / 1583.6.2 内存池技术原理 / 1583.6.3 实现一个极简内存池 / 1593.6.4 实现一个稍复杂的内存池 / 1603.6.5 内存池的线程安全问题 / 1613.7 与内存相关的经典 bug / 1623.7.1 返回指向局部变量的指针 / 1633.7.2 错误地理解指针运算 / 1633.7.3 解引用有问题的指针 / 1643.7.4 读取未被初始化的内存 / 1653.7.5 引用已被释放的内存 / 1663.7.6 数组下标是从 0 开始的 / 1673.7.7 栈溢出 / 1673.7.8 内存泄漏 / 1683.8 为什么 SSD 不能被当成内存用 / 1693.8.1 内存读写与硬盘读写的区别 / 1693.8.2 虚拟内存的限制 / 1713.8.3 SSD 的使用寿命问题 / 1713.9 总结 / 171第 4 章 从晶体管到 CPU,谁能比我更重要 / 1734.1 你管这破玩意叫 CPU / 1744.1.1 伟大的发明 / 1744.1.2 与、或、非: AND 、OR、NOT / 1744.1.3 道生一、一生二、二生三、三生万物 / 1754.1.4 计算能力是怎么来的 / 1754.1.5 神奇的记忆能力 / 1764.1.6 寄存器与内存的诞生 / 1774.1.7 硬件还是软件?通用设备 / 1784.1.8 硬件的基本功:机器指令 / 1794.1.9 软件与硬件的接口:指令集 / 1794.1.10 指挥家,让我们演奏一曲
|
|