4 - Eingehende Aufgaben schnell annehmen,
5 - das Ergebnis der Aufgabe auf Anfrage zurückgeben
6 - wenn kein Ergebnis vorhanden ist, den entsprechenden Status zurückgeben
/*
Prozessor - ein Dienst, der eine lange, ressourcenintensive Operation ausführt. Er ist bereits implementiert
Die von ihm zurückgegebenen Fehler beziehen sich ausschließlich auf inkorrekte Eingabedaten, sind stabil und eine erneute Anfrage ist sinnlos
*/
type Processor interface {
Process([]byte) ([]byte, error)
}
/*
Wir nehmen an, dass wir einen Generator für eindeutige Identifikatoren haben (z.B. UUID).
Der Generator garantiert, dass keine Kollisionen auftreten
*/
type ID string
// func NewID() ID
/*
Der Scheduler akzeptiert Aufgaben von Clients, schiebt sie in die Warteschlange und startet die Verarbeitung.
Stellt sicher, dass höchstens 'threads' Verarbeitungsvorgänge gleichzeitig laufen
Ermöglicht es, den Status der Aufgabe zu überprüfen und das Ergebnis zu erhalten
blockiert nicht seine öffentlichen Methoden für die Verarbeitung
*/
type Scheduler struct {
processor Processor
}
func NewScheduler(
prc Processor,
threads int,
) *Scheduler {
// Initialisierungslogik
return &Scheduler{
processor: prc,
}
}
func (s *Scheduler) Queue(request []byte) ID {
// Implementierung
return ""
}