lproc_queue
Проект представляет собой библиотеку многопоточности, основанной на библиотеке Linux pthread для Lua 5.3+.
Исходники основаны на проекте из книжки https://www.lua.org/pil/3/lproc.c. Недостатком оригинального проекта является то, что межпоточная коммуникация основана на одиночных сообщениях, которые вызывают блокировку, скажем, отправляющего сообщение потока в случае если получатель ещё не прочитал предыдущее сообщение. В результате потоки ждут друг друга и нередко всё самоблокируется.
В данной библиотеке механизм сообщений между потоками полностью заменён. Новый механизм основан на очередях сообщений. Каждая очередь состоит из 256 элементов. Каждый элемент содержит 256 байт. Эти размеры можно переопределить на стадии компиляции. Всего таких очередей может быть сколько угодно. Очереди связываются в кольцевой двусвязанный список.
Благодаря механизму очередей сообщений становится возможным реализация неблокирующих вызовов 'положить в очередь' и 'извлечь из очереди'. Таким образом, потоки выполняются независимо друг от друга и в тоже время обмениваются друг с другом данными.
Исключительные ситуации 'очередь пуста' и 'очередь заполнена' обрабатываются и возвращаются в Lua.
Проект тестировался (не долго :( ) в системе Ubuntu Linux 20.04. Для сборки библиотеки нужно:
- установить в систему Lua
sudo apt install lua5.3
; - установить в систему
sudo apt-get install liblua5.3-dev
; - скачать данный репозиторий
- уточнить в make - файле пути к заголовочным файлам и библиотекам
- дать команду
make
Собранная библиотека lproc_queue.so
появится в папке build
.
Тестовый проект лежит в папке lproc_queue/lproc_queue/tests/probe_01/
рядом с символической ссылкой на библиотеку. Для запуска теста надо перейти
в эту папку и ввести команду lua5.3 ./probe_01.lua
.
Подробная документация к библиотеке лежит в файле lproc_queue.pdf