Кто может посоветовать библиотеку для lock-free in-memory очереди?



Привет.Кто может посоветовать библиотеку для lock-free in-memory очереди? Надо на C/C++, обязательно либо BSD, либо LGPL.
987   11  

Comments

  1. Кирилл Коринский
    Кирилл Коринский 5 лет назад
    Я как-то смотрел на https://github.com/cameron314/concurrentqueue и https://github.com/cameron314/readerwriterqueue
    • Yury Kisliak
      Yury Kisliak 5 лет назад
      Я пробовал тоже. Работет, Но ! Надо понимать (и там четко написано это) что если у тебя несколько источников(продюсеров сообщений) независимых то на выходе из очереди сообщения не всегда будут в том порядке в какойм они были запушены в очередь (однако гарантируется порядок относительно отдельного продюсера).
  2. Макс Лапшин
    Макс Лапшин 5 лет назад
    lock-free всё равно использует блокировку между ядрами и процессорами для того, что убедиться в атомарности доступа к флагу.
    • Yu Ersh
      Yu Ersh 5 лет назад
      Конечно.Чем больше ядер, тем больше всё тормозит.В конечном итоге CPI вырастает до сотен и тысяч, а 90% времени все процессоры проводят в функции InterlockedIncrement/Decrement и в ожидании доступа к памяти.
    • Макс Лапшин
      Макс Лапшин 5 лет назад
      Yu Ersh а какие есть средства диагностики этого?
    • Yu Ersh
      Yu Ersh 5 лет назад
      Конечно есть, современные профайлеры/дебаггеры это делают.Я как-то пробовал intel vtune, но есть и бесплатное.
  3. Konstantin Gontarenko
    Konstantin Gontarenko 5 лет назад
    Offopic, но мне кажется lock-free is overrated.Хорошие locks довольно быстрые, например современные стандартные C++ вполне годные. Они не сильно медленнее тех memory barriers, на которых работают эти lock free штуки.Если consumer делает хоть что-то с полученными данными, а не просто их игнорирует, разницы с lock-free мне кажется не будет даже на big iron, потому что на NUMA, memory barriers пропорционально дорожают.
    • Ильнар Борханов
      Ильнар Борханов 5 лет назад
      Локфри не всегда ради скорости, и вообще ради скорости надо бенчмаркать, а не просто брать локфри магию в надежде на чудо.Вот я часто сталкиваюсь с тем что треды с локами и форки друг с другом дружат не прямо хорошо.Или, если идет речь о работе через шаредмемори.
  4. Andrei Nigmatulin
    Andrei Nigmatulin 5 лет назад
    Есть wait-free:https://github.com/.../liburcu/blob/master/urcu/wfcqueue.h
  5. Anton Povarov
    Anton Povarov 5 лет назад
    https://github.com/khizmax/libcds
  6. Антон Герасимов
    Антон Герасимов 5 лет назад
    libcds нет?