nella mia applicazione, devo risolvere un problema eseguendo molte attività associate a network-io e qualche volta a un compito legato a io e diviso in più piccoli compiti associati. Queste attività vengono attualmente eseguite utilizzando il meccanismo threadpool standard di Java. Mi chiedo se posso passare al framework fork-and-join? Ma la domanda è: il framework forkandjoin di solito viene utilizzato per risolvere le operazioni associate o vincolate alla CPU? Presumo che siano per lo più per operazioni associate alla CPU, perché il framework fork-and-join utilizza la tecnica del furto del lavoro per utilizzare i processori core di multo, ma se lo utilizzo per compiti legati all'IO, ci saranno effetti negativi?Il pool di thread fork-and-join di Java è utile per eseguire l'attività legata all'IO?
risposta
Fork-join è progettato per le attività legate all'elaborazione, quindi in genere direi di no. Fork-join ha un'API (l'API ManagedBlocker) per dire al framework FJ che il thread si bloccherà per un po 'e non per allineare nuove attività ma è davvero progettato per brevi attese (come ottenere un blocco), non arbitrariamente lungo aspetta IO.
Abbiamo un sistema che utilizza fork-join e si spostano le attività legate all'IO in un pool di executor separato. Quando i dati arrivano, attivano le attività nel pool fork-join in modo tale che solo il lavoro con cpu-bound si verifica lì.
Se si sta tentando di affrontare l'aspetto "I/O legato" del problema, dubito che passare da thread standard a fork-and-join migliorerà le cose ... presumendo che tu abbia implementato il attuale soluzione basata su thread correttamente. (E in base alla risposta di Alex Miller, l'interruttore potrebbe effettivamente peggiorare le cose.)
Oppure, per dirla in un altro modo, il modo per rendere più veloce l'applicazione I/O associata è affrontare i problemi che lo rendono necessario/O associato ... o aumenta la larghezza di banda I/O del sistema.
in questo caso non sembra essere un vantaggio convincente per i fork-joins.
non sembra essere uno svantaggio significativo sia perché non si guida una risorsa troppo difficile.
tutto sommato, vorrei rimanere con il pool di thread fino a quando non hai altri sviluppi importanti da fare.
- 1. Pool di thread in Java
- 2. pool di thread, dati condivisi, Java Sincronizzazione
- 3. Qual è l'uso di un pool di thread in Java?
- 4. Java pool di thread esecutore Monitoraggio
- 5. Pool di thread e thread locali in cache Java
- 6. Ruby 1.9 pool di thread
- 7. Pool di thread C++
- 8. qual è la differenza tra pool di thread di Windows e pool di thread CLR
- 9. Verifica se un thread è tornato al pool di thread
- 10. 500 thread di lavoro, che tipo di pool di thread?
- 11. Qual è il pool di thread "dipendente dal sistema"?
- 12. InheritableThreadLocal e pool di thread
- 13. Il modello di memoria Java si verifica prima delle interazioni del pool di thread
- 14. Perché la deserializzazione di Java è legata alla CPU?
- 15. Amico, dov'è il mio thread ?? (o: rinominare un thread pool di thread .NET - è possibile?)
- 16. come java thead pool executor si occupa di thread interrotto
- 17. Problemi relativi al pool di thread Glassfish
- 18. Gestione del pool di thread attività "duplicate"
- 19. Posso creare il mio pool di thread per creare i thread come primo piano?
- 20. Aggiunta di thread in modo ricorrente a un pool di thread Java
- 21. Gestione pool di thread agente in Clojure
- 22. Posso eseguire un thread all'interno di un thread in java?
- 23. Come designare un pool di thread per gli attori
- 24. Come utilizzare invokeAll() per consentire a tutti i pool di thread di eseguire le proprie attività?
- 25. Impostazione dimensione ideale del pool di thread
- 26. Trova il numero di lavori in attesa di thread dal pool di servizio executor (JAVA)?
- 27. Utilizzo di boost :: asio pool di thread per attività generiche
- 28. L'oggetto ThreadLocal verrà cancellato dopo che il thread è stato restituito al pool di thread?
- 29. È utile il guadagno?
- 30. Pool di thread C# "Fixed"/"Load Balanced"?
"Buono" in base a quale criterio? Che tipo di I/O? Networking? Disco? Console? GUI? Fork-and-join è davvero un "pool di thread"? – EJP
è un'attività di I/O collegata in rete. – Shamik
domanda perspicace; upvoted – necromancer