
The existing ThreadPoolExecutor can only grow its workers pool, and does it until the size reaches max_workers. This change adds a new DynamicThreadPoolExecutor that can both grow and shrink the pool based on the proportion of the currently busy threads to the total number of threads. Change-Id: I5a92977b71a120748feb1c370cd3a0106b574f0a Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com> Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>