4 - szybko akceptuj nadchodzące zadania,
5 - zwracaj wynik zadania na żądanie
6 - jeśli nie ma wyniku, zwróć odpowiedni status
/*
Procesor - usługa wykonująca długotrwałą, zasobożerną operację. Jest już zaimplementowana
Błędy, które zwraca, są wyłącznie związane z niepoprawnymi danymi wejściowymi, są stabilne i powtarzanie ich jest bezcelowe
*/
type Processor interface {
Process([]byte) ([]byte, error)
}
/*
Zakładamy, że mamy generator unikalnych identyfikatorów (np. UUID).
Generator gwarantuje, że nie dojdzie do kolizji
*/
type ID string
// func NewID() ID
/*
Harmonogram przyjmuje zadania od klientów, umieszcza je w kolejce i uruchamia w przetwarzaniu.
Zapewnia, że jednocześnie uruchomionych jest nie więcej niż 'threads' metod przetwarzania
Umożliwia sprawdzenie statusu zadania i uzyskanie wyniku
nie blokuje metod publicznych swojego interfejsu do przetwarzania
*/
type Scheduler struct {
processor Processor
}
func NewScheduler(
prc Processor,
threads int,
) *Scheduler {
// logika inicjalizacji
return &Scheduler{
processor: prc,
}
}
func (s *Scheduler) Queue(request []byte) ID {
// implementacja
return ""
}