补全:时间片轮转
(只看「算」的格数:核对 4、写盘 1、心跳 1。处理器一次算一格。) 补全 round_robin(jobs, quantum):只要还有任务没算完,就按顺序给每个未完成的任务算 quantum 格(不够就算剩下的),记下顺序。用时间片
补全:分给几个核
(只看「算」的格数:核对 4、写盘 1、心跳 1。处理器一次算一格。) 补全 makespan(jobs, cores):把任务按格数从大到小依次分给当前最闲的核,交回最忙的核的格数。
补全:真开三个线程
用真线程做一次并发:三个线程各自把一个计数器加到 1000,主线程 join 等它们全做完再打印。补全 worker 和启动/等待。
线程为什么便宜
开一个线程比开一个进程便宜得多。根本原因是【0】。
开一个进程要准备什么
操作系统开一个新进程时,必须为它准备的是【0】。
什么时候值得花这个钱
明知进程贵,有些场合还是要开进程而不是线程。最典型的理由是【0】。
八个工人各要多少
(成本模型:开一个进程 100 格(要给它独立的内存和资源表),开一个线程 10 格(只要一个栈和一个编号)。) 要开 8 个工人。看全开进程和全开线程各花多少格: PROCESS, THREAD = 100, 10 n = 8 print
真开五十个线程
真开 50 个线程,每个只做一件小事就结束。看做完之后完成计数和还活着的线程数: import threading done = [] lock = threading.Lock() def work(i): with lock
补全:按需求选便宜的
(成本模型:开一个进程 100 格(要给它独立的内存和资源表),开一个线程 10 格(只要一个栈和一个编号)。) 补全 cost(n, isolate):需要隔离就只能开进程,否则开线程;交回总成本。
补全:开线程收结果
补全:开 5 个线程,每个把自己的编号平方后放进共享列表(加锁),主线程等完再按顺序打印。