Pull to refresh

Comments 5

Каким образом тестировалась библиотека, в каких проектах она использовалась?
Про тестирование.
Набор тестов, включенных в либу, прогоняется постоянно. Перед очередным релизом все тесты прогоняются для всех компиляторов — GCC от 4.3 до 4.8, MS VC++ 2008 — 2012, CLang 3.0 — 3.3 — в основном на Linux 32/64 и Windows 32/64 десктопах. Один прогон полного теста занимает порядка 12 часов (очень зависит от железа), так что суммарно тесты занимают где-то неделю. После тестирования на десктопах — прогон на серверах. Здесь мне очень помогает GCCfarm — там в основном Linux, зато хороший зоопарк процессоров. На прошлых работах был хороший зоопарк железа и осей — на них отлаживал свой atomic-велосипед.
Если всё OK — выкладываю релиз.

Вообще тестирование lock-free алгоритмов в многопотоковом режиме — интересная тема. Например, как тестировать очередь? Как проверить в multithread, что основное свойство очереди — FIFO — не нарушается? То же самое — с set/map: неудача поиска по ключу — это что? Элемент ещё не включен в контейнер, уже удален из него, или это ошибка в алгоритме поиска?..
В патологических случаях приходится применять тяжелые инструменты типа valgrind. Тормозная вещь, но иногда помогает уловить чтение удаленных данных и т.п.
Сейчас присматриваюсь к новому инструменту — ThreadSanitizer (включено в Clang 3.2 и GCC 4.8 x86). По описаниям вещь более подходящая.

По поводу проектов.
libcds выросла из реальной исследовательской работы, поэтому кое-что я применял (и применяю) в проприетарных серверных разработках.
Судя по feedback и поиску в инете, определенное распространение либа получил в студенческих кругах — видимо, потому, что сделана по опубликованным работам с указанием источников ;-) Студентам легко писать лабы/курсовики )))))

Интересный факт: после того, как я влез в lock-free и стал его курить применять, я все чаще стал избегать применения каких-либо разделяемых данных. Поразительно, что в 50% случаев удается-таки найти приемлемое решение без shared data.
Вы наверное будете смеяться, если я скажу, что мы пишем параллельные приложения на PHP… Поскольку в PHP нет thread'ов, вся «многопоточность» реализуема только с помощью fork(). И вот, что удивительно — этого более, чем хватает для написания подавляющего большинства приложений, которые у нас есть, и все проблемы с локами ложатся на СУБД, которые обычно с задачей синхронизации доступа к данным справляются весьма неплохо :).
Студентам легко писать лабы/курсовики )))))

Можно надеяться, что сегодняшние студенты вырастут и завтра начнут использовать lock-free структуры уже в настоящих проектах. Я сам планирую использовать ваш материал для организации занятий. Спасибо за этот цикл статей!
Sign up to leave a comment.

Articles