Поддержка есть несколько потоков, выполняющих задачи запроса, которые каждый из них вернет list
в результате, какая структура данных будет быстрее для слияния результатов?Слияние списка одновременно - что лучше, CopyOnWriteArrayList или ConcurrentLinkedQueue?
Неограниченная поточно-очереди на основе связанных узлов. Эта очередь заказывает элементы FIFO (first-in-first-out). Глава очереди - это тот элемент, который был в очереди самым длинным. Хвост очереди - это тот элемент, который был в очереди в кратчайшее время. Новые элементы вставляются в хвост очереди, а операции поиска очереди получают элементы в начале очереди. ConcurrentLinkedQueue является подходящим выбором, когда многие потоки будут предоставлять доступ к общей коллекции. Как и большинство других параллельных реализаций коллекции, этот класс не позволяет использовать нулевые элементы. Эта реализация использует эффективный «безжизненный» алгоритм, основанный на одном из описанных в простых, быстрых и практических алгоритмах без очереди и блокирования параллельных очередей Магедом М. Майклом и Майклом Л. Скоттом.
Как название предлагает CopyOnWriteArrayList создает копию основного ArrayList с каждой операцией мутации, например, добавить или установить. Обычно CopyOnWriteArrayList очень дорог, потому что требует дорогостоящей копии массива с каждой операцией записи, но очень эффективен, если у вас есть список, в котором итерация превышает количество мутаций, например. вам в основном нужно перебирать ArrayList и не изменять его слишком часто.
Что вы думаете? – Kayaman
Весь подход нескольких потоков, объединяющих их вывод в общую структуру данных, является ошибочным. Оптимальные системы никогда этого не делают; вместо этого у них есть нисходящий поток, который принимает частичные результаты от нескольких потоков в параллельной очереди и затем объединяется в одну пакетную операцию. –
@MarkoTopolnik это исключало бы сценарий, в котором у вас долгоживущие потоки, и вы хотите проверять результаты по мере их создания, вместо того, чтобы ждать окончательной пакетной операции. – tucuxi