Kolejka zadań

0

cześć,
chce przerobić swój serwer tworzący dla każdego nowego klienta osobny wątek na kolejkę zadań obsługiwaną przez 10 wątków.
Teoretycznie mam pomysł jak to rozwiązać nie wiem tylko jak zrobić część w której przydzielam zadania do każdego z wątków.

Chciałbym zrobić tak, że:

  • przychodzi żądanie od Klienta
  • serwer umieszcza je na liście zadań
  • wątek przydzielający zadania pobiera pierwsze z listy i przydziela do pierwszego wolnego wątku (jest ich 10).

Nie wiem tylko czy moje myślenie jest OK. Zastanawiam się czy nie jest błędem w implementacji fakt, że w momencie szukania wolnego wątku (np pętlą po jakieś fladze etc.) mogę uznać jakiś wątek za zajęty ale zanim znajdę wolny on już się zwolni.

Podpowiedzcie czy moje myslenie o zrobieniu tego w ten sposob jest OK? Czy jednak istnieją inne rozwiązania.

pozdrawiam!

2

w momencie szukania wolnego wątku (...) mogę uznać jakiś wątek za zajęty ale zanim znajdę wolny on już się zwolni.
Nawet jeśli się zwolni, to przecież w następnym obrocie pętli dostałby przydział.

Twoje myślenie jest ok, brakuje tylko jednego: jeśli wątek główny nie będzie w stanie odnaleźć wolnego "pracownika" (wątku) w ciągu np. 10 sekund, to powinien wysłać adekwatny komunikat do użytkownika (503 Service Unavailable), coby ten nie czekał wieczność.

0

Czy to jest jakby w standardzie, 'dobrym tonie', odeslac taki komunikat? Czy moze jednak wrzucic takie cos na kolejke i czekac na zwolnienie jakiegos watku?

1

No ale masz wrzucić do kolejki i czekać ;-)
Tylko w razie zawieszenia się wszystkich wątków strona będzie się wczytywać wieczność, zamiast po prostu wyrzucić błąd o tym, że teraz serwer jest przeciążony i prosimy wrócić później. Plus ludzie oraz boty także nie będą czekać nie wiadomo ile, stąd lepiej jest poinformować.

0

O ile dobrze Cie zrozumialem to sa do tego gotowe narzedzia takie jak RabbitMQ i Work Queue

1 użytkowników online, w tym zalogowanych: 0, gości: 1