Ответы пользователя по тегу Boost
  • В каких случаях лучше использовать lockfree структуры данных, а когда на мютексах?

    @degs
    Это сильно зависит от задачи, в общем случае lockfree алгоритмы позволяют передавать сообщения без блокировки читающего/пишущих потоков и получить задержку < 1 мкс на сообщение. Если у вас именно такие технические требования, то boost::lockfree вероятно единственный портабельный вариант.
    Однако, если вас интересует скорость передачи (а не задержка в терминах мкс/на сообщение), то обычная блокирующая очередь ничем не уступит по параметру собщений/сек.
    Еще один вариант применения - если вам нужно как можно быстрее освободить пишущий поток (типичный пример - логгер), тогда неблокирующая очередь - самый оптимальный алгоритм.
    Обратите также внимание на то что boost::lockfree, как и все другие реализации, не предоставляет способа синхронизации читающего потока, то есть он будет непрерывно работать тратя ресурсы CPU. Если же вы искуственно его синхронизуете, например на мьютексе, то lockfree очередь выродится до обычной блокирующей. Еще из недостатков, существующая имплементация жестко ограничивает типы данных в очереди, простые данные с побитовым копированием и без конструктора, это очень ограничивает варианты дизайна.
    Моя рекомендация - если у вас нет очень жестких специфических требований на пердачу данных, используйте обычную очередь.
    Ответ написан
    3 комментария