KR
Size: a a a
KR
f
f
V
f
f
f
spawn_blocking(|| block_on(lock_and_run_long(key))), чтобы экзекьютор мог запустить как можно больше lock_and_run_long и дойти там до блокирующей операции. lock_and_run_long лочит мьютекс только если было несколько вызовов с одним и тем же key. И мне хочется избежать ситуации когда целый поток лочится на мьютексте, хотя экзекьютор мог бы его переключить на работу по запуску еще одной lock_and_run_longf
spawn_blocking(||
lock_and_run_long(1) // <= took 1 thread to run long
lock_and_run_long(1) // <= took 1 thread to wait for previous lock
lock_and_run_long(1) // starve
lock_and_run_long(2) // starve
)spawn_blocking(|| block_on(async move {
lock_and_run_long(1).await // <= took 1 thread to run long
lock_and_run_long(1).await // <= met locked mutex, yielded
lock_and_run_long(1).await // <= met locked mutex, yielded
lock_and_run_long(2).await // <= took 1 thread to run long
}))f
f
lock_and_run_long переписать на акторов и перестать из мьютекса делать очередь 🙂m
f
m
IB
DF
if let/ while letDF
LB
m
MB