并发并不是你想象的那样
合集 · 直观理解计算机技术【CoreDumped】 (68)
-
代码中指定变量类型为何如此重要?
11:03
-
栈为何如此之快?
13:46
-
堆为何如此之慢?
17:53
-
动态数组的内部机制(ArrayList VS LinkedList)
19:56
-
探索计算机并发与多任务处理的历史
15:37
-
晶体管是如何运行代码的?
12:54
-
晶体管是如何记忆数据的?
16:12
-
制作一个CPU来运行程序
18:47
-
计算机如何将字符串转换为数字
11:23
-
动态随机存取存储器(DRAM)的工作原理
17:18
-
计算机处理器是如何运行条件和循环的?
16:05
-
一个程序不是一个进程
6:51
-
深入理解进程,如何进行上下文切换?计算机科学中最深刻和最成功的想法之一。
14:52
-
处理器内部的单个位如何保护操作系统的完整性?
20:20
-
计算的心跳:时钟如何推动 CPU 前进?
13:14
-
英语原声版-计算的心跳:时钟如何推动 CPU 前进?
14:22
-
(英语原声)进程间通信:共享内存或发送消息
14:15
-
(中文配音)进程间通信:共享内存或发送消息
12:29
-
(中文配音)为什么单核处理器需要线程?
14:59
-
(英语原声)为什么单核处理器需要线程?
16:07
-
(中文配音)多核系统上的线程
9:26
-
(英语原声)多核系统上的线程
11:27
-
(中文配音)为什么应用程序是特定于操作系统的?
11:52
-
(英语原声)为什么应用程序是特定于操作系统的?
13:09
-
(英语原声)硬件如何在多任务处理中协助软件?
13:15
-
(中文配音)硬件如何在多任务处理中协助软件?
11:29
-
链表的一个实际应用
20:34
-
让你的电脑运行更流畅的奇妙算法
45:02
-
(流畅中文配音)让你的电脑运行更流畅的奇妙算法
43:38
-
(原声双语字幕)当程序调用 sleep() 时会发生什么?
19:41
-
(流畅中文配音)当程序调用 sleep() 时会发生什么?
17:57
-
这个简单算法驱动了真正的解释器:Pratt Parsing
20:40
-
(双语字幕)编程中最难以捉摸的Bug:竞态条件
18:19
-
(流畅中文配音)编程中最难以捉摸的Bug:竞态条件
19:23
-
(中文配音)阻止内存攻击的底层电路
16:02
-
(英语原声)阻止内存攻击的底层电路
14:51
-
为什么有些项目会使用多种编程语言?
18:04
-
为什么有些项目会使用多种编程语言?
19:32
-
别再杀进程了!让 Ctrl+C 变成“喵”……(用信号实现)
17:15
-
别再杀进程了!让 Ctrl+C 变成“喵”...(用信号实现)
19:23
-
80 年代避免竞态条件的算法(以及它为何失败)
19:05
-
80 年代避免竞态条件的算法(以及它为何失败)
19:43
-
CPU如何与众多不同设备交互?
22:10
-
(中文配音)CPU如何与众多不同设备交互?
23:52
-
(中文配音)你每天都在用的奇特CPU操作
14:04
-
你每天都在用的奇特CPU操作
13:04
-
(中文配音)历史如何塑造了我们今天仍在使用的编程术语?
18:04
-
(英语原声)历史如何塑造了我们今天仍在使用的编程术语?
17:42
-
为什么有些底层项目里会充满这种奇怪的代码?
16:41
-
(中文配音)为什么有些底层项目里会充满这种奇怪的代码?
16:39
-
编译与解释代码如何共处同一程序中?
21:35
-
(英语原声)编译与解释代码如何共处同一程序中?
21:30
-
【双语字幕】Core Dumped 常见问题的集中回答
17:09
-
【双语字幕】90年代的设计决策阻碍了Python并行化
13:36
-
【中文配音】90年代的设计决策阻碍了Python并行化
12:01
-
Linux创建进程的奇怪方式
17:51
-
【中文配音】Linux创建进程的奇怪方式
18:14
-
CPU如何运行函数?
19:49
-
【中文配音】CPU如何运行函数?
19:38
-
没有人解释的问题:内核的边界在哪里?
17:15
-
【英语原声】没有人解释的问题:内核的边界在哪里?
19:36
-
硬件如何让线程问题不再那么棘手?
35:49
-
为什么在macOS、Windows和Linux上安装应用程序如此不同?
19:47
-
游戏公司真的能破坏你的电脑吗?
24:00
-
一个视频说透“架构”:为什么你的程序换个CPU就可能跑不了?
10:43
-
CPU如何执行有符号和无符号运算?
14:45
-
简单指令, 奇妙算法
19:11
-
当CPU遇到它不认识的指令,会发生什么?😱【底层原理】
9:26
Description
在这个信息爆炸的时代,我们对电脑同时运行多个程序早已习以为常。但你是否曾想过,这一切是如何实现的?本视频将带你穿越计算机科学的历史长河,深入探讨并发技术的基本原理,以及它是如何让单核CPU也能同时处理多个任务。 从80年代中期的Commodore Amiga和Apple Macintosh开始,我们见证了早期计算机如何克服硬件限制,实现多程序同时运行的壮举。我们将回顾早期计算机的原始形态,了解它们是如何从占据整个房间的大型机,逐渐演化为现代的个人电脑。 视频将详细解释早期操作系统如何通过调度程序,智能地在多个用户和任务之间分配CPU时间,创造出多任务处理的假象。我们还会探讨中断和操作系统如何协同工作,确保CPU资源的合理分配。 随着个人电脑的普及,操作系统如何从最初的单任务模式,发展到现在能够支持复杂的多任务处理。我们也会介绍多核系统的出现,它是如何彻底改变了我们对计算机性能的期待。 最后,视频将揭示现代操作系统如何处理抢占式调度,以防止任何单一程序长时间占用CPU资源,从而提高系统的安全性和响应速度。
Comments
时常感觉在大学里(本科)学生还没怎么写过程序的情况下对着课本学计算机组成、操作系统原理,死记硬背概念过考试,只会打击对编程的兴趣。而且传统形式讲课的效率也远不如此类视频,既不形象,时间又长
♥ 70 ↩ 9
很有用,我觉得大学目前教材是坨,无趣生硬,老师自己都缺乏形象理解,他考试勾就完了,学生考试背就玩了,就没有关心背后原理,在如今ai的模式下,试问,从早背到晚,一天天死记,能背得过ai否。
♥ 21
视频中有个有趣的细节没提到。 CPU的硬件中断会自动进行“现场保护”,会将当前程序指针(哈弗结构会额外包括数据指针)保存到中断硬件栈中,当中断程序结束后CPU会将硬件栈中保存的程序指针(哈弗结构包括数据指针)自动还原到当前CPU对应的寄存器中,称之为“中断恢复”。 现代操作系统进行进程切换利用了这个机制,进程调度器实际上是运行在中断里的,每当系统需要进行进程调度,会读取中断硬件栈(即当前线程)中的数据并加以保存,然后将目标进程的数据写入对应位置,这样在中断服务函数结束后CPU会自动切换到目标进程,完全不需要考虑切换时机带来的时序问题。 另一个有趣的细节是,ARM架构的某些版本并不允许程序访问中断的硬件栈,所以进程调度器会主动触发一个中断异常,然后该操作会导致中断硬件栈中的数据被弹入SPSR寄存器,并进入中断异常服务函数,中断异常服务函数结束后会将SPSR中的值压回中断硬件栈。这个SPSR寄存器可以被直接访问,所以间接实现了访问硬件中断栈。
♥ 18 ↩ 8
有趣的是unix项目当初在ibm两次proposal都没过,纯情怀项目[doge]
♥ 7
原视频是好的,但这英式中文太难受了
♥ 4 ↩ 2
好看,爱看,中文配音尽管是ai的,但也能够理解,最起码不强行吧搬运说成自制(什么风气)
♥ 3 ↩ 3
(=・ω・=)
♥ 2
其实对于计算机的底层原理,抛开现象看本质会容易理解的多。 现阶段的计算机都是二进制,现在无论是字符还是计算,都是逐步分解成二进制再由二进制返回另一个二进制再合成结果的过程。 多线程其实同理,原来我们输入的是n个0,假设计算机读取后返回n个1。多线程就是让这n个0中间插入x个1,并让这x个1输出到正确位置。对于cpu而言,它依旧是按照既定的方法去运算并输出
♥ 2
"并发是关于一次处理很多事情,而并行是一次做很多事情。" 我需要一个更确切的描述。
♥ 2 ↩ 7
这玩意儿能讲15分钟,视频学习效率太低了
♥ 1
催更 [辣眼睛]
♥ 1 ↩ 1
多来点!好吃!!!
♥ 1
第二
♥ 1
第一[doge]
♥ 1 ↩ 1
@MilkyAi 整理笔记发邮箱
不光是古早电脑cpu,哪怕是现在的嵌入式领域freertos系统核心思想也是用单线程处理器但是允许多个用户看似同时访问,这些用户可以各自执行多个程序,看起来像是并发运行。
没有字幕好难受[笑哭]
非常感谢up的翻译
专业名词还是保留了英文,这点挺好,因为翻译有时候会带来偏差。