Zwykle, gdy używa się metody parallelStream języka Java 8, wynikiem jest wykonanie za pomocą domyślnej, wspólnej puli łączenia widżetów (to jest ForkJoinPool.commonPool()).Java parallelStream() z niestandardową pulą z kradzieżą rozmówcy?
Jest to jednak wyraźnie niepożądane, jeśli ma się pracę, która jest daleko od obciążenia procesora, np. może często czekać na IO. W takich przypadkach należy użyć oddzielnej puli, dostosowanej do innych kryteriów (np. Ile czasu prawdopodobnie będzie to faktycznie wykorzystywać procesor).
Nie ma oczywistego, oczywiste, sposób uzyskania parallelStream(), aby użyć innej puli, ale jest sposób, jak szczegółowe here.
Niestety, takie podejście pociąga za sobą wywołanie operacji terminalu w strumieniu równoległym z wątku puli połączeń wideł. Wadą tego jest to, że jeśli pula dołączania celu-widelca jest całkowicie zajęta istniejącą pracą, całe wykonanie będzie czekać na nią, nie robiąc absolutnie nic. W ten sposób pula może stać się wąskim gardłem gorszym niż wykonanie z pojedynczym gwintem. Natomiast gdy używasz parallelStream() w "normalny" sposób, ForkJoinPool.common.externalHelpComplete() lub ForkJoinPool.common.tryExternalUnpush() są używane, aby wywoływać wątek spoza puli, pomagając w przetwarzaniu.
Czy ktoś wie o sposób zarówno dostać parallelStream() do korzystania z innych niż domyślne widelec-join basen i mają gwint dzwonisz spoza puli pomocy widelca-przyłączyć się do przetworzenia tej pracy (ale nie reszta pracy związanej z basenem widłowym)?
Nie rozumiem twojego problemu. Wadą tego jest to, że jeśli pula dołączenia celu-widelca jest całkowicie zajęta istniejącym work_. Czy nie tworzysz nowej puli tylko dla tego równoległego wywoływania strumienia? –
Jest jeszcze gorzej. Kiedy wywołujesz 'get' na swoich zadaniach, które nie znajduje się we wspólnej puli, nadal będzie wywoływać' ForkJoinPool.common.tryExternalUnpush() ', ale oczywiście nie znajdzie zadania w kolejce wspólnej puli. – Holger
Aby odpowiedzieć na pytanie, nie, nie tworzyłem nowej puli wątków tylko dla tego wywołania. Raczej udostępniam tę pulę wątków w wielu podobnych wywołaniach, z których niektóre mogą się nakładać, niektóre z nich mogą mieć znacznie dłuższe/większe zadania niż inne. –