4 - rychle přijímat příchozí úkoly,
5 - vrátit výsledek úkolu na požádání
6 - pokud není výsledek, vrátit odpovídající stav
/*
Procesor - služba, která provádí dlouhou, náročnou operaci. Je již implementována
Chyby, které vrací, jsou výhradně spojeny s nesprávnými vstupními údaji, jsou stabilní a opětovné požádání je zbytečné
*/
type Processor interface {
Process([]byte) ([]byte, error)
}
/*
Předpokládáme, že máme generátor unikátních identifikátorů (například UUID).
Generátor zaručuje, že nedojde ke kolizím
*/
type ID string
// func NewID() ID
/*
Plánovač přijímá úkoly od klientů, zařadí je do fronty a spustí je ke zpracování.
Zajišťuje, že současně běží nejvýše 'threads' metod zpracování
Umožňuje zkontrolovat stav úkolu a získat výsledek
neblokuje své veřejné metody pro zpracování
*/
type Scheduler struct {
processor Processor
}
func NewScheduler(
prc Processor,
threads int,
) *Scheduler {
// inicializační logika
return &Scheduler{
processor: prc,
}
}
func (s *Scheduler) Queue(request []byte) ID {
// implementace
return ""
}