Что такое Rust, эквивалентный Intel tbb::concurrent_queue?

Я ищу эквивалент concurrent_queue из tbb модуля Intel в Rust. Я нашел несколько ящиков:

  1. multiqueue

  2. два-блокировка очередь

  3. перекладина-Deque

и даже

  1. фьючерсный бассейн

  2. токарно-бассейн

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

Хотя я не очень разбираюсь в программировании на C++, я почти уверен, что tbb concurrent_queue очень быстрая реализация очереди MPMC Вы не можете быть близки к этой производительности, если вы только оберните контейнер очереди в Mutex (который проверен одним из моих друзей).

Поскольку эффективность (как задержка, так и пропускная способность) - это главное, что меня волнует, что мне следует использовать в Rust? Очередь может быть либо ограниченной, либо неограниченной, и мне, вероятно, нужно упорядочить Acquire-Release.

1 ответ

Я думаю crossbeam::sync::MsQueue и crossbeam::sync::SegQueue из ящика с перекладиной имеют те же возможности, что и связанный с вами concurrent_queue.

Это очереди без блокировки, которые можно использовать неблокирующим образом с push а также try_pop,

Этот тест указывает на то, что SegQueue быстрее чем MsQueue, но это все еще может зависеть от вашего варианта использования.

Другие вопросы по тегам