上一页 1 2 3 4 5 6 7 8 9 10 ··· 23 下一页
摘要: 一、引子 前面我们用了三讲,用一个个的电路组合,制作出了一个完整功能的CPU。这里面一下子给你引入了三个“周期”的概念,分别是指令周期、机器周期(或者CPU周期)以及时钟周期。 你可能会有点摸不着头脑了,为什么小小一个CPU,有那么多的周期(Cycle)呢?我们在专栏一开始,不是把CPU的性能定义得 阅读全文
posted @ 2019-08-30 18:09 活的潇洒80 阅读(1210) 评论(0) 推荐(0) 编辑
摘要: 一、引子 上一讲,我们讲解了时钟信号是怎么实现的,以及怎么利用这个时钟信号,来控制数据的读写,可以使得我们能把需要的数据“存储”下来。那么,这一讲,我们要让计算机“自动”跑起来。 通过一个时钟信号,我们可以实现计数器,这个会成为我们的PC寄存器。然后,我们还需要一个能够帮我们在内存里面寻找指定数据地 阅读全文
posted @ 2019-08-29 18:33 活的潇洒80 阅读(1334) 评论(0) 推荐(0) 编辑
摘要: 一、引子 上一讲,我们看到,要能够实现一个完整的CPU功能,除了加法器这样的电路之外,我们还需要实现其他功能的电路。其中有一些电路,和我们实现过的加法器一样,只需要给定输入,就能得到固定的输出。这样的电路,我们称之为 组合逻辑电路(Combinational Logic Circuit)。 1、只有 阅读全文
posted @ 2019-08-29 18:33 活的潇洒80 阅读(993) 评论(0) 推荐(0) 编辑
摘要: 一、引子 过去这么多讲,我们的程序都是自动运行且正常运行的。自动运行的意思是说,我们的程序和指令都是一条条顺序执行,你不需要通过键盘或者网络给这个程序任何输入。正常运行是说,我们的程序都是能够正常执行下去的,没有遇到计算溢出之类的程序错误。 不过,现实的软件世界可没有这么简单。一方面,程序不仅是简单 阅读全文
posted @ 2019-08-28 18:10 活的潇洒80 阅读(957) 评论(0) 推荐(0) 编辑
摘要: 一、引子 过去几年,最知名、最具有实用价值的ASIC就是TPU了。各种解读TPU论文内容的文章网上也很多。不过,这些文章更多地是从机器学习或者AI的角度,来讲解TPU。 上一讲,我为你讲解了FPGA和ASIC,讲解了FPGA如何实现通过“软件”来控制“硬件”,以及我们可以进一步把FPGA设计出来的电 阅读全文
posted @ 2019-08-28 18:10 活的潇洒80 阅读(528) 评论(0) 推荐(1) 编辑
摘要: 一、引子 过去很长一段时间里,大家在讲到高科技、互联网、信息技术的时候,谈的其实都是“软件”。从1995年微软发布Windows 95开始,高科技似乎就等同于软件业和互联网。著名的风险投资基金Andreessen Horowitz的合伙人Marc Andreessen,在2011年发表了一篇博客,声 阅读全文
posted @ 2019-08-28 18:10 活的潇洒80 阅读(829) 评论(0) 推荐(0) 编辑
摘要: 一、引子 上一讲,我带你一起看了三维图形在计算机里的渲染过程。这个渲染过程,分成了顶点处理、图元处理、栅格化、片段处理,以及最后的像素操作。这一连串的过程, 也被称之为图形流水线或者渲染管线。 因为要实时计算渲染的像素特别地多,图形加速卡登上了历史的舞台。通过3dFx的Voodoo或者NVidia的 阅读全文
posted @ 2019-08-27 12:00 活的潇洒80 阅读(1241) 评论(0) 推荐(0) 编辑
摘要: 一、引子 1、为什么Windows操作系统、用了SSD的系统盘,就不能用磁盘碎篇整理功能? 如果你平时用的是Windows电脑,你会发现,用了SSD的系统盘,就不能用磁盘碎片整理功能。这是因为,一旦主动去运行磁盘碎片整理功能,就会发生一次块的擦除,对应块的寿命就少了一点点。这个SSD的擦除寿命的问题 阅读全文
posted @ 2019-08-26 18:24 活的潇洒80 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 一、引子 讲完了CPU,我带你一起来看一看计算机里的另外一个处理器,也就是被称之为GPU的图形处理器。过去几年里,因为深度学习的大发展,GPU一下子火起来了,似乎GPU成了一个专为深度学习而设计的处理器。那GPU的架构究竟是怎么回事儿呢?它最早是用来做什么而被设计出来的呢? 想要理解GPU的设计,我 阅读全文
posted @ 2019-08-26 18:24 活的潇洒80 阅读(1288) 评论(2) 推荐(0) 编辑
摘要: 一、引子 过去几年里,整个计算机产业届,都在尝试不停地提升I/O设备的速度。把HDD硬盘换成SSD硬盘,我们仍然觉得不够快;用PCI Express接口的SSD硬盘替代SATA接口的SSD硬盘,我们还是觉得不够快,所以,现在就有了傲腾(Optane)这样的技术。 但是,无论I/O速度如何提升,比起C 阅读全文
posted @ 2019-08-26 18:24 活的潇洒80 阅读(1362) 评论(0) 推荐(1) 编辑
摘要: 一、引子 随着3D垂直封装技术和QLC技术的出现,今年的“618”,SSD硬盘的价格进一步大跳水,趁着这个机会,我把自己电脑上的仓库盘,从HDD换成了SSD硬盘。我的个人电脑彻底摆脱了机械硬盘。 随着智能手机的出现,互联网用户在2008年之后开始爆发性增⻓,大家在网上花的时间也越来越多。这也就意味着 阅读全文
posted @ 2019-08-22 13:13 活的潇洒80 阅读(698) 评论(0) 推荐(0) 编辑
摘要: 一、引子 我在第5讲讲计算机指令的时候,给你看过MIPS体系结构计算机的机器指令格式。MIPS的指令都是固定的32位长度,如果要用一个打孔卡来表示,并不复杂。 第6讲的时候,我带你编译了一些简单的C语言程序,看了x86体系结构下的汇编代码。眼尖的话,你应该能发现,每一条机器码的长度是不一样的。 而C 阅读全文
posted @ 2019-08-21 18:49 活的潇洒80 阅读(1011) 评论(0) 推荐(1) 编辑
摘要: 上世纪60年代,计算机还是异常昂贵的设备,实际的计算机使用需求要面临两个挑战。 第一,计算机特别昂贵,我们要尽可能地让计算机忙起来,一直不断地去处理一些计算任务。第二,很多工程师想要用上计算机,但是没有能力自己花钱买一台,所以呢,我们要让很多人可以共用一台计算机。 一、缘起分时系统 为了应对这两个问 阅读全文
posted @ 2019-08-21 18:49 活的潇洒80 阅读(602) 评论(0) 推荐(0) 编辑
摘要: 一、引子 性能问题 机器指令里面的内存地址都是虚拟内存地址。程序里面的每一个进程,都有一个属于自己的虚拟内存地址空间。我们可以通过地址转换来获得最终的实际物理地址。我们每一个指令都存放在内存里面,每一条数据都存放在内存里面。因此,“地址转换”是一个非常高频的动作,“地址转换”的性能就变得至关重要了。 阅读全文
posted @ 2019-08-21 18:45 活的潇洒80 阅读(878) 评论(0) 推荐(0) 编辑
摘要: 一、简单页表 1、页表的概念 想要把虚拟内存地址,映射到物理内存地址,最直观的办法,就是来建一张映射表。这个映射表,能够实现虚拟内存里面的页,到物理内存里面的页的一一映射。这个映射表,在计算机里面,就叫作 页表(PageTable)。页表这个地址转换的办法,会把一个内存地址分成 页号(Directo 阅读全文
posted @ 2019-08-20 20:25 活的潇洒80 阅读(989) 评论(0) 推荐(0) 编辑
摘要: 在专栏一开始的时候,我和你说过,在计算机组成原理这门课里面,很多设计的核心思路,都来源于性能。在前免讲解CPU的时候,相信你已经有了切身的感受了。 大部分程序员开发的都是应⽤系统。在开发应用系统的时候,我们遇到的性能瓶颈大部分都在I/O上。在第36讲讲解局部性原理的时候,我们一起看了通过把内存当作是 阅读全文
posted @ 2019-08-16 18:22 活的潇洒80 阅读(948) 评论(0) 推荐(0) 编辑
摘要: 在1991年,我刚接触计算机的时候,很多计算机还没有硬盘。整个操作系统都安装在5⼨或者3.5寸的软盘里。不过,很快⼤部分计算机都开始⽤上了直接安装在主板上的机械硬盘。到了今天,更早的软盘早已经被淘汰了。在个人电脑和服务器里,更晚出现的光盘也已经很少用了。机械硬盘的生命力仍然非常顽强。无论是作为个人电 阅读全文
posted @ 2019-08-16 18:21 活的潇洒80 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 我们在前面的章节搭建了最简单的电路,在这里面,计算机的输入设备就是一个一个开关,输出设备呢,是一个一个灯泡。的确,早期发展的时候,计算机的核心是做“计算”。我们从“计算机”这个名字上也能看出这艺点。不管是中文名字“计算机”,还是英文名字“Computer”,核⼼都是在”计算“这两个字上。不过,到了今 阅读全文
posted @ 2019-08-15 21:45 活的潇洒80 阅读(602) 评论(0) 推荐(1) 编辑
摘要: 专栏讲到现在,如果我再问你,计算机五大组成部分是什么,应该没有人不知道了吧?我们这一节要讲的内容,依然要围绕这五大部分,控制器、运算器、存储器、输入设备和输出设备。 CPU所代表的控制器和运算器,要和存储器,也就是我们的主内存,以及输入和输出设备进行通信。那问题来了,CPU从我们的键盘、鼠标接收输入 阅读全文
posted @ 2019-08-15 18:37 活的潇洒80 阅读(783) 评论(0) 推荐(0) 编辑
摘要: 在这一节内容开始之前,我们先来看一个3行的小程序。你可以猜一猜,这个程序里的循环1和循环2,运行所花费的时间会差多少?你可以先思考几分钟,然后再看我下面的解释 在这段Java程序中,我们首先构造了一个64×1024×1024大小的整型数组。在循环1里,我们遍历整个数组,将数组中每一项的值变成了原来的 阅读全文
posted @ 2019-08-15 18:13 活的潇洒80 阅读(703) 评论(0) 推荐(0) 编辑
摘要: 一、缓存一致性问题指的是什么 在这两个CPU核心里,1号核心要写一个数据到内存里。这个怎么理解呢?我拿一个例子来给你解释。 比方说,iPhone降价了,我们要把iPhone最新的价格更新到内存里。为了性能问题,它采用了上一讲我们说的写回策略, 1、先把数据写入到L2 Cache里面,然后把Cache 阅读全文
posted @ 2019-08-15 18:13 活的潇洒80 阅读(2258) 评论(2) 推荐(0) 编辑
摘要: 在我工作的十几年里,写了很多Java的程序。同时,我也面试过大量的Java工程师。对于一些表示自己深入了解和擅长多线程的同学,我经常会问这样一个面试题:“ volatile这个关键字有什么作用?”如果你或者你的朋友写过Java程序,不妨来一起试着回答一下这个问题。 就我面试过的工程师而言,即使是工作 阅读全文
posted @ 2019-08-14 18:02 活的潇洒80 阅读(901) 评论(0) 推荐(0) 编辑
摘要: 上一节,我讲了哈希算法的四个应⽤,它们分别是:安全加密、数据校验、唯⼀标识、散列函数。今天,我们再来看剩余三种应用: 负载均衡、数据分片、分布式存储 你可能已经发现,这三个应用都跟分布式系统有关。没错,今天我就带你看下,哈希算法是如何解决这些分布式问题的。 应用五:负载均衡 1、如何实现一个会话粘滞 阅读全文
posted @ 2019-08-10 08:41 活的潇洒80 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 平时进行服务端软件开发的时候,我们通常会把数据存储在数据库里。而服务端系统遇到的第一个性能瓶颈,往往就发生在访问数据库的时候。 这个时候,大部分工程师和架构师会拿出一种叫作“缓存”的武器,通过使用Redis或者Memcache这样的开源软件,在数据库前面提供一层缓存的数据, 来缓解数据库面临的压力, 阅读全文
posted @ 2019-08-10 08:12 活的潇洒80 阅读(734) 评论(0) 推荐(0) 编辑
摘要: 一、引子 1、指令 2、计算 然而,光知道这两部分还不能算是真正揭开了CPU的秘密,只有把“指令”和“计算”这两部分功能连通起来,我们才能构成一个真正完整的CPU。这一讲,我们就在前面知识的基础上,来看一个完整的CPU是怎么运转起来的。 二、指令周期 1、计算机每执行一条指令的过程 4.重复进行1~ 阅读全文
posted @ 2019-08-10 08:11 活的潇洒80 阅读(1394) 评论(0) 推荐(0) 编辑
摘要: 一、理解存储器的层次结构 1、和阅读书籍做个对照 1、CPU比喻成计算机的“大脑”我们思考的东西、就好比CPU中的 寄存器 2、而我们大脑中的记忆,就好比 CPU Cache 2、SRAM 1、SRAM为什么被称为静态存储器 2、SRAM的存储密度不高 3、不过,因为SRAM的电路简单,所以访问速度 阅读全文
posted @ 2019-08-10 08:11 活的潇洒80 阅读(951) 评论(0) 推荐(0) 编辑
摘要: 还记得2011年CSDN的“脱库”事件吗?当时,CSDN网站被黑客攻击,超过600万用户的注册邮箱和密码明问被泄露,很多网友对CSDN明⽂保存用户密码行为产生了不满。 如果你是CSDN的⼀名易程师,你会如何存储用户密码这么重要的数据吗?仅仅MD5加密一下存储就够了吗? 要想搞清楚这个问题,就要先弄明 阅读全文
posted @ 2019-08-08 22:19 活的潇洒80 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 一、LRU 缓存淘汰算法 1、回顾LRU淘汰算法 2、一个缓存主要包含哪些操作 3、单独使用链表和组合使用对比 4、hnext的作用 5、如何把时间复杂度降到O(1) 在缓存中查找一个数据 从缓存中删除一个数据 往缓存中添加一个数据 二、Redis有序集合 1、有序集合 2、有序集合的操作 3、单独 阅读全文
posted @ 2019-08-08 21:47 活的潇洒80 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 通过上一节的学习,我们知道,散列表的查询效率并不能笼统地说成是O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好, 或者装载因子过大,都可能导致散列冲突发生的概率升高,查询效率下降。 在极端情况下,有些恶意的攻击者,还有可能通过精⼼构造的数据,使得所有的数据经过散列函数之后 阅读全文
posted @ 2019-08-08 21:22 活的潇洒80 阅读(381) 评论(0) 推荐(0) 编辑
摘要: Word这种文本编辑器你平时应该经常见吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个个错误的英文单词,它就会用标红的放式提示“拼写错误”。 Word的这个单词拼写检查功能,虽然很小但却非常实用。你有没有想过,这个功能是如何实现的呢?其实啊,一点儿都不难。只要你学完今天的内容,散 阅读全文
posted @ 2019-08-08 20:33 活的潇洒80 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 你是不是感到很疑惑,浮点数的近似值究竟是怎么算出来的?浮点数的加法计算又是怎么回事儿?在实践应用中,我们怎么才用好浮点数呢?这一节,我们就一起来看这几个问题 一、浮点数的二进制转换 1、十进制浮点数9.1 2、小数的二进制表示是怎么回事 3、浮点数其实是用二进制的科学计数法来表示的 4、为什么0.3 阅读全文
posted @ 2019-08-08 20:23 活的潇洒80 阅读(1245) 评论(1) 推荐(1) 编辑
摘要: 今天我们来聊聊“链表(Linked list)”这个数据结构。学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应⽤场景,那就是LRU缓存淘汰算法。 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常用的CPU缓存、数据库缓存、浏览器缓存等等。 缓存的 阅读全文
posted @ 2019-08-08 20:23 活的潇洒80 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 技巧一:理解指针或引用的含义 1、指针和引用有什么关系 2、代码实现 技巧二:警惕指针丢失和内存泄漏 1、指针是如何弄丢的呢? 我拿单链表的插入操作为例来给你分析一下 如图所示,我们希望在结点a和相邻的结点b之间插入结点x,假设当前指针p指向结点a。如果我们将代码实现变成下面这个样子,就会发⽣指针丢 阅读全文
posted @ 2019-08-07 22:28 活的潇洒80 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 一、python是静态还是动态类型?是强类型还是弱类型? 1、动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2、动态还是静态指的是编译期还是运行期确定类型 3、强类型指的是不会发生隐式类型转换 若类型语言 强类型语言 4、python作为后端语言优缺点 1、胶水语言、轮子多、应用广泛 2、 阅读全文
posted @ 2019-07-26 17:17 活的潇洒80 阅读(659) 评论(0) 推荐(0) 编辑
摘要: 一、案例环境描述 1、环境准备 2CPU,4GB内存 预先安装docker sysstat工具 案例总共由三个容器组成: 1、包括一个 MySQL 数据库应用、2、一个商品搜索应用3、一个数据处理的应用。 其中,商品搜索应用以 HTTP 的形式提供了一个接口: /:返回 Index Page;/db 阅读全文
posted @ 2019-07-24 15:23 活的潇洒80 阅读(1741) 评论(0) 推荐(0) 编辑
摘要: 一、案例环境描述 1、环境准备 2CPU,4GB内存 预先安装docker sysstat工具 2、温馨提示 案例中 Python 应用的核心逻辑比较简单,你可能一眼就能看出问题,但实际生产环境中的源码就复杂多了。所以,我依旧建议,操作之前别看源码,避免先入为主,要把它当成一个黑盒来分析。这样 你可 阅读全文
posted @ 2019-07-24 11:38 活的潇洒80 阅读(1347) 评论(1) 推荐(0) 编辑
摘要: 一、在软硬件接口中,CPU帮我们做了什么事情 1、从硬件角度看CPU 2、软件工程师看CPU 3、不同的cpu能听懂的语言不太一样 4、不同的指令无法相通 5、存储程序型计算机 一台IBM的Plugboard 二、从编译到汇编,代码怎么变成机器码? 1、C 语言程序程序案例 1、我们拿一小段真实的 阅读全文
posted @ 2019-05-29 17:54 活的潇洒80 阅读(2196) 评论(1) 推荐(1) 编辑
摘要: 一、MySQL逻架构图 二、连接器工作原理刨析 1、连接器工作原理图 2、原理图说明 1、连接命令 2、查询链接状态 3、长连接端连接 1、什么是长链接? 数据库里面,长连接是连接成功后,如果客户端持续有请求,则一直使用同一个链接。 2、什么是短连接? 短连接则是指每次执行完很少的几次查询就断开连接 阅读全文
posted @ 2019-05-29 15:43 活的潇洒80 阅读(5075) 评论(1) 推荐(0) 编辑
摘要: 一、文件系统的功能规划 1、引子 咱们花了这么长的时间,规划了会议室管理系统,这样多个项目执行的时候,隔离性可以得到保证。 但是,会议室里面被回收,会议室里面的资料就丢失了。有一些资料我们希望项目结束也能继续保存, 这就需要一个和项目运行生命周期无关的地方,可以永久保存,并且空间也要比会议室大的多。 阅读全文
posted @ 2019-05-29 15:36 活的潇洒80 阅读(1352) 评论(0) 推荐(0) 编辑
摘要: 一、浮点数的不精确性 1、引子 我们开发一个电商App商品的价格常常会是 9 块 9; 现在流行的深度学习算法,对应的机器学习里的模型里的各个权重也都是 1.23 这样的数。 可以说,在实际的应用过程中,这些有零有整的实数,是和整数同样常用的数据类型,我们也需要考虑到。 2、不是0.9而是 0.89 阅读全文
posted @ 2019-05-29 15:36 活的潇洒80 阅读(749) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 23 下一页