Подтвердить что ты не робот

Является ли пул потоков fork-and-join Java хорош для выполнения связанной с IO задачи?

в моем приложении, я должен решить проблему, выполнив много задач, связанных с сетью и io, и когда-нибудь одну задачу, связанную с io, и разделим ее на более мелкие задачи. Эти задачи в настоящее время выполняются с использованием стандартного механизма threadpool Java. Мне интересно, могу ли я переходить к инфраструктуре fork-and-join? Но вопрос в том, что forkandjoin framework обычно используется для решения связанных операций или связанных с процессором операций? Я предполагаю, что они в основном для операций с привязкой к ЦП, потому что fork-and-join framework использует технику кражи работы, чтобы использовать многоядерные процессоры, но если я буду использовать ее для связанных с IO задач, будет ли какой-либо неблагоприятный эффект?

4b9b3361

Ответ 1

Fork-join предназначен для задач, связанных с вычислением, поэтому я бы сказал, что нет. У Fork-join есть API (ManagedBlocker api), чтобы сообщить инфраструктуре FJ, что ваш поток будет блокироваться некоторое время, а не выстраивать новые задачи, но он действительно предназначен для коротких ожиданий (например, для получения блокировки), а не произвольно долго ждать ввода-вывода.

У нас есть система, которая использует fork-join, и мы шунтируем задачи, связанные с IO, в отдельный пул исполнителей. Когда данные поступают, они запускают задачи в пул fork-join, так что там происходит только работа cpu-bound.

Ответ 2

Если вы пытаетесь решить проблему, связанную с "привязкой к I/O" вашей проблемы, я сомневаюсь, что переход от стандартных потоков к fork-and-join улучшит ситуацию... при условии, что вы внедрили текущий на основе потоков. (И, основываясь на ответе Алекса Миллера, коммутатор действительно может значительно ухудшить ситуацию.)

Или, говоря иначе, способ ускорить работу связанного с I/O приложения - это решить проблемы, связанные с привязкой ввода/вывода... или увеличить пропускную способность ввода-вывода в системе.

Ответ 3

в этом случае не кажется убедительным преимуществом fork-join.

похоже, не существует значительного недостатка, потому что вы не слишком сильно управляете каким-то ресурсом.

в целом, я останусь с пулом потоков, пока у вас не будет другого важного развития.