4 - gelen gelen görevleri hızlıca kabul et,
5 - istekte bulunulduğunda görevin sonucunu döndür
6 - sonuç yoksa, uygun durumu döndür
/*
İşlemci - uzun ve kaynak yoğun bir işlemi gerçekleştiren bir servis. Zaten uygulanmış durumda
Döndürdüğü hatalar tamamen yanlış giriş verileriyle ilgilidir, kararlıdır ve tekrar istemek anlamsızdır
*/
type Processor interface {
Process([]byte) ([]byte, error)
}
/*
Varsayıyoruz ki, benzersiz tanımlayıcılar (örneğin UUID) üreten bir jeneratörümüz var.
Jeneratör, çakışma olmayacağını garanti eder
*/
type ID string
// func NewID() ID
/*
Planlayıcı, müşterilerden görevleri alır, sıraya koyar ve işlemeye başlar.
Aynı anda en fazla 'threads' işlem metodunun çalışmasını sağlar
Görev durumunu kontrol etme ve sonucu alma imkanı sağlar
kendi genel arayüz metodlarını bloklamaz
*/
type Scheduler struct {
processor Processor
}
func NewScheduler(
prc Processor,
threads int,
) *Scheduler {
// başlangıç mantığı
return &Scheduler{
processor: prc,
}
}
func (s *Scheduler) Queue(request []byte) ID {
// uygulama
return ""
}