Что такое Rust, эквивалентный Intel tbb::concurrent_queue?
Я ищу эквивалент concurrent_queue
из tbb модуля Intel в Rust. Я нашел несколько ящиков:
и даже
Я чувствую, что все они делают схожие вещи, однако в их документах кажется, что они используют разные алгоритмы для реализации.
Хотя я не очень разбираюсь в программировании на C++, я почти уверен, что tbb concurrent_queue
очень быстрая реализация очереди MPMC Вы не можете быть близки к этой производительности, если вы только оберните контейнер очереди в Mutex
(который проверен одним из моих друзей).
Поскольку эффективность (как задержка, так и пропускная способность) - это главное, что меня волнует, что мне следует использовать в Rust? Очередь может быть либо ограниченной, либо неограниченной, и мне, вероятно, нужно упорядочить Acquire-Release.
1 ответ
Я думаю crossbeam::sync::MsQueue
и crossbeam::sync::SegQueue
из ящика с перекладиной имеют те же возможности, что и связанный с вами concurrent_queue.
Это очереди без блокировки, которые можно использовать неблокирующим образом с push
а также try_pop
,
Этот тест указывает на то, что SegQueue
быстрее чем MsQueue
, но это все еще может зависеть от вашего варианта использования.