为什么要限并发度

提交一万个任务时要限住同时在跑的数量,因为【0】。

开始练习 →

十个任务三个 worker

任务一大堆,闸门只放三个进去 里面满了三个,其余在门口等 提交 10 个任务、池 max_workers=3,会【0】。

开始练习 →

一次最多几个在跑

(每道题开头都有同一段:上面的池小工具。) 贯穿全条的池小工具(标准库 ThreadPoolExecutor:固定 workers 个线程复用): pool_sum(fn, args, workers) 池对每个参数跑 fn,交回所

开始练习 →

信号量也能限并发

(每道题开头都有同一段:上面的池小工具。) 没有池时,用一个信号量(Semaphore(n))也能限「同时最多 n 个」:每个任务开工前 acquire、干完 release,同时拿到许可的最多 n 个。这里用一个受锁保护的峰值计数器量一下

开始练习 →

补全:算同时最多几个

(每道题开头都有同一段:上面的池小工具。) 贯穿全条的池小工具(标准库 ThreadPoolExecutor:固定 workers 个线程复用): 补全 peak(ntasks, workers):一次最多几个任务在跑(worker 和任务

开始练习 →

补全:用信号量限并发

(每道题开头都有同一段:上面的池小工具。) 补全 gate(limit, ntasks):用 threading.Semaphore(limit) 让同时在跑的不超过 limit,跑 ntasks 个任务,交回 (峰值是否 <= li

开始练习 →

⚠️ 自己写:不限并发会怎样

(每道题开头都有同一段:上面的池小工具。) 不限并发=所有任务一下全冲出去。补全 concurrent_now(ntasks, limit):limit 为 0 表示不限(同时在跑 = ntasks),否则同时在跑 = min(ntasks

开始练习 →

池内部长什么样

线程池内部其实就是【0】。

开始练习 →

worker 循环怎么写

池里每个 worker 的循环是【0】。

开始练习 →

怎么让 worker 停

要让池里的 worker 停下来收工,办法是【0】。

开始练习 →