Kolejka zadań

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 701
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!

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
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ść.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 701
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?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
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ć.

coconuts
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.