Имам уеб услуга, която прави множество малки изчисления, преди да върне резултата. Искам да използвам ExecutorService
, предоставен от Executors.newFixedThreadPool()
като начин за прилагане на модела Master - Worker (т.е. извикване на invokeAll
и оставяне на нишката да изчака всички резултати да приключат). В идеалния случай всички нишки на уеб услуги използват една и съща услуга за изпълнение, така че да не се налага всички да създават собствен пул от нишки и могат просто да споделят един голям пул, който използва цялото време за обработка на системата.
Въпроси, които имам с този подход:
- безопасно ли е достъпът до функцията
invokeAll
от множество нишки. - дали услугата изпълнител просто ще обработва заявките последователно (т.е. първо всички задачи от нишка 1, след това тези за нишка
- има ли начин да имаме да речем 10 работни нишки и максималният брой налични нишки да зависи от броя на постъпващите заявки, така че да кажем, че имаме 1 заявка, тя използва всички 10 нишки за тази заявка. Ако имате 2 заявки, тя ги разделя на 5 нишки на заявка и т.н.