2011-11-21 5 views
20

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?

+0

"Buono" in base a quale criterio? Che tipo di I/O? Networking? Disco? Console? GUI? Fork-and-join è davvero un "pool di thread"? – EJP

+0

è un'attività di I/O collegata in rete. – Shamik

+0

domanda perspicace; upvoted – necromancer

risposta

23

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ì.

2

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.

1

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.

Problemi correlati