补全:开一次用很多次

(成本模型:开一个进程 100 格(要给它独立的内存和资源表),开一个线程 10 格(只要一个栈和一个编号)。) 8 个任务不一定要 8 个工人:开 2 个线程轮流做。补全 pool_cost(tasks, workers):只付开 wor

开始练习 →

线程之间共享的东西

同一个进程的两个线程,一个把全局列表 done 加了一项,另一个立刻能看到。因为【0】。

开始练习 →

线程各自独有的东西

同一个进程的线程也有各自独有的部分。每个线程自己一份、别的线程碰不到的是【0】。

开始练习 →

进程之间为什么互不影响

两个进程各自算一份账,一个进程写坏了自己的内存崩掉了,另一个毫无察觉。因为【0】。

开始练习 →

两个线程往一个列表里放

两个线程各往同一个共享列表里放 1000 项,主线程等完数一数: import threading shared = [] def work(): for i in range(1000): shared.app

开始练习 →

补全:加锁的计数器

两个线程各把共享计数器加 1000 次。补全 worker:每次加之前拿锁、加完放锁(用 with)。

开始练习 →

补全:每个线程自己的一份

threading.local() 给每个线程一份独立的存储。补全:每个线程把自己的名字存进 local,再从 local 读回来放进结果。

开始练习 →

补全:模拟进程的隔离

用字典模拟:开线程时把同一份内存交给它,开进程时复制一份。补全两个函数,然后各改一次,看原来那份变没变。

开始练习 →

补全:等所有人做完再看

主线程不等 join 就去看结果,会看到半成品(工人先睡 0.05 秒再放)。补全:五个工人各放一项,主线程 join 全部之后再打印长度。

开始练习 →

线程帮得上谁

(任务模型:每个任务写成 (名字, 算的格数, 等的格数)——「算」要占处理器,「等」是等磁盘或网络回话,不占处理器。「算账」的三个任务:核对算 4 等 0,写盘算 1 等 3,心跳算 1 等 5。) 写盘和心跳大部分时间在等,核对全程在算

开始练习 →