(原声双语字幕)当程序调用 sleep() 时会发生什么?
合集 · 直观理解计算机技术【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
https://www.youtube.com/watch?v=e5g8eYKEhMw ### **文本总结** 本视频探讨了编程中`sleep`函数的底层原理,对比了硬件定时器与软件延迟的实现方式。硬件定时器通过触发器电路实现倒计时,但资源有限;软件方案(如忙等待)效率低且不精确。现代操作系统通过“睡眠队列”管理多个进程的休眠请求,利用单个计时器动态调整唤醒时间。最终,`sleep`通过系统调用让进程主动释放CPU,实现高效等待,而非占用资源空转。 ### **生成文本标签** #编程 #操作系统 #硬件定时器 #sleep函数 #CPU调度 #进程管理 #计算机原理 #软件开发 #系统调用 #并发编程 1. **“为什么编程中的延迟函数叫sleep?硬件与软件的深度解析!”** 2. **“sleep函数背后的秘密:CPU如何高效‘暂停’程序?”** 3. **“忙等待 vs 休眠队列:操作系统如何管理延迟?”** 4. **“从触发器到系统调用:sleep函数的工作原理全揭秘!”** 5. **“程序员必看!sleep函数的底层实现与性能优化”** 6. **“为什么JavaScript的sleep这么难写?其他语言笑了”** 7. **“操作系统如何用1个定时器处理100个sleep请求?”** 8. **“硬件中断+睡眠队列:现代操作系统的延迟魔法”** 9. **“你的sleep函数准吗?实时系统与通用系统的差异”** 10. **“放弃忙等待!理解sleep如何让CPU效率翻倍”**
Comments
非实时操作系统,会在到时间「后」叫醒你,但不保证到时间时马上叫醒你[doge]
♥ 146 ↩ 14
js:喜欢我 await new Promise 吗?
♥ 60 ↩ 2
感觉视频内嵌广告有点多,所以后面中文配音计划剪辑掉广告。
♥ 29 ↩ 4
core dumped的视频做得很可视化很生动,好搬
♥ 15 ↩ 1
讲的可以,但是开头有点不准确。 1.glibc的sleep背后是nanosleep系统调用,大概步骤可能就是设置定时器,之后就是线程入"睡眠队列",线程就处于可中断睡眠状态,被唤醒的可能有2种,信号中断或者定时器到了。之后那些等待io的线程处于不可中断的睡眠状态,也就是视频的wait。其实Linux还有个僵尸状态,但是你如果用Pthread,基本上不会处于状态,它会自动清理。 2.我不知道除c或者c➕➕ java其他语言是如何处理的,但是java的sleep和java的wait其实差不多的,它们对于阻塞的处理完全是一样,都是调用javathread(jvm对应的thread的c➕➕对象)的parkevent。parkevent里面有Pthread的mutex和condition,还有count状态变量,由次也进入了可中断的睡眠状态。只不过在jvm层面,对于wait还有其他处理,比如阻塞之前调用监视器的exit释放锁,最后自己进入wait队列(不过都是jvm层面的处理)
♥ 7
涉及到竞争冒险的情况下还是要看情况用阻塞性延时的,尤其是MCU裸机编程
♥ 3
除非有大量的进程或线程调用了延时导致上下文切换的时间比进程执行时间还长。不然都在OS每次滴答一下就迅速的轮询了哪些进程线程需要被唤醒,很快而且很准确,只要控制好上下文切换所要消耗的时间。
♥ 3 ↩ 2
这视频好用心啊
♥ 3
讲得真好
♥ 3 ↩ 1
如果没有实时唤醒的需求,谁会考虑 wait 或 delay?尤其在某些编程语言中,用 wait 得加锁,特麻烦。
♥ 2
sleep(6)[doge]
♥ 1
感谢翻译,视频讲得很深入
♥ 1
Python的sleep(0)会让出cpu时间片吗
♥ 1 ↩ 2
请问中配什么时候发[打call]
♥ 1 ↩ 2
这个incogni会不会就是那些数据公司的产品,不过从别的公司给钱变成用户给钱。。。?
我猜猜,因为模拟延迟?