和锁的差别
Semaphore(1) 和 Lock 都是「一次一个」,真正的差别是【0】。
多放了一次
用 Semaphore(2) 限流,某处不小心 release 了三次而只 acquire 了两次。结果【0】。
最多同时几个
本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate
有界信号量多放会怎样
本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate
补全:限流的下载池
本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate
补全:用信号量当信号
本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate
补全:连接池
本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate
太粗是什么
上面:整段关在锁里,三条排成一列 下面:只把一小截关在锁里,三条一起走 「锁太粗」指的是【0】。
太细是什么
上面:整段关在锁里,三条排成一列 下面:只把一小截关在锁里,三条一起走 「锁太细」的典型错误是【0】。
时间模型
本节的东西: model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细) timed(fn, workers, work) 开