In un ForkJoinPool
ForkJoinTask
, il thread di lavoro corrente partecipa al furto del lavoro?L'attuale lavoratore partecipa al furto del lavoro?
Ho letto le implicazioni che un pool di fork join può lavorare rubare da thread bloccati o in attesa. L'attuale lavoratore sembra un candidato ovvio. Una volta che il lavoratore chiama .join()
su un'altra attività, tale attività viene essenzialmente bloccata.
D'altra parte, vedo molti articoli che implicano conclusioni diverse. Ad esempio, il consenso generale sul fatto che il thread di lavoro corrente dovrebbe funzionare prima di attendere le attività biforcute.
Ci sono alcuni articoli che trattano l'uso di ForkJoinTask.getSurplusQueuedTaskCount
come metodo di bilanciamento del lavoro nella coda avendo il lavoratore corrente fanno parte del lavoro. Se anche il lavoratore attuale sta rubando, questo non sembra necessario.
Naturalmente, vorrei massimizzare le operazioni di thread e mantenere tutti i lavoratori al massimo. Capire se il thread corrente ruba anche il lavoro (ad esempio quando viene chiamato .join
) aiuterà a chiarire.
È necessario uno specifico tipo di problema per essere al massimo vedere http://stackoverflow.com/questions/7926864/ how-is-the-fork-join-framework-better-a-thread-pool –
Ho scritto uno di questi articoli e posso garantirvi che join() non risulta in work-stealing http: // coopsoft .com/it/Calamity2Article.html # join Il furto di lavoro è valido solo quando il deque è vuoto. Personalmente, non avrei microgestito il framework con getSurplus .... ecc. – edharned