Коллекция с самой быстрой (одновременной) операцией добавления - PullRequest
0 голосов
/ 11 мая 2018

Я ищу коллекцию с наиболее эффективной параллельной операцией добавления элемента. Scala или Java это хорошо.

Я обычно:

  • вставка 100 000 записей, по одной за раз
  • не заботится о заказе
  • читать и очищать коллекцию только при отсутствии добавления. Так что не критично

Кроме того, он должен работать с несколькими потоками (отсюда и параллельное ограничение). Но мне нужно, чтобы он был наиболее эффективным, когда нет параллелизма: проект для одновременной безопасности не должен иметь слишком большого влияния, когда нет параллельного доступа.

Я использую эту коллекцию для записи измерений производительности. Вот почему это должно быть максимально эффективным, чтобы не смещать слишком много фактической производительности. Однако, поскольку размер коллекции может быть большим и неизвестным заранее, он должен эффективно справляться с увеличением размера.

Так какую коллекцию лучше всего использовать?

В настоящее время я использовал mutable.ListBuffer с buffer.synchronized{ ... } вокруг операции добавления (и очистки). Я пытался использовать var buf: List (scala) с аналогичным блоком synchronized{ ... }, но это серьезно повлияло на измерения.

1 Ответ

0 голосов
/ 11 мая 2018

Я бы сказал CurrentLinkedQueue . Это O (1) вставка с использованием CAS. Таким образом, при умеренной нагрузке у вас, вероятно, не будет быстрого добавления Если у вас очень высокая нагрузка, вы можете рассмотреть LinkedBlockingQueue .

Поскольку вы говорите, что он, вероятно, будет однопоточным при добавлении, использование CLQ и CAS будет вашим лучшим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...