#826

Vytvoř frontu úloh, která se čistě škáluje do šířky

V databázi je fronta úloh — tabulka jobs se stavem pending pro nezpracované řádky. Současně se na ni dívá pět workerů: každý chce uchopit nejstarší úlohu a označit ji jako „zpracovává se“. Obyčejný zámek na úrovni řádku s limitem způsobí, že se všech pět workerů nahromadí na stejném řádku a serializují se. Lékem je přeskočit řádky, které jsou již zamčené, a vzít další volný: každý worker dostane svou úlohu a paralelismus funguje bez kolizí. jobs(id SERIAL, status, payload) obsahuje čtyři řádky ve stavu pending (a, b, c, d). Vezmi z jobs jednu pending úlohu s nejmenším id, přepni ji na running — zbývající tři zůstanou pending.

Výsledek vašeho dotazu se zobrazí zde