Июл 222014
 

Столкнулся с необходимостью реализовать многопоточное приложении на языке lua.

Встроенный механизм coroutine (кооперативной многозадачности) “естественно” не подошел.

После долгого гугления был найден кандидат – библиотека  lualanes.

Основными доводами для ее использования стали:

  • реальная многопточность
  • простота использования
  • кроссплатформенность.

Пример многопоточного приложения:

--Подключаем библиотеку LuaLanes
local lanes = require "lanes".configure()
--Подключаем библиотеку LuaSocket (для реализации паузы)
lanes.require("socket")

--Тело первого потока
function firstThread()
    require("socket")
    while true do
		print("First thread")
		socket.sleep(0.5)
    end
end

--Тело второго потока
function secondThread()
    require("socket")
    while true do
		print("Second thread")
		socket.sleep(0.9)
    end
end

--Запускаем первый поток
genFirstThread = lanes.gen( "*",firstThread )()
--Запускаем второй поток
genSecondThread = lanes.gen( "*",secondThread )()

--Уходим в бесконечный цикл
while true do
    socket.sleep(1)
end

Больше примеров можно найти среди исходников библиотеки.

Для себя были собраны deb пакеты (проверены в debian и ubuntu).

И самое главное – библиотека собирается под OpenWRT. Тут можно взять Makefile (позже надеюсь войдет в upstream). А тут лежат собранные для OpenWRT пакеты (в том числе для CyberWRT).

UPD: На 1.08.2014 пакет включен в репозиторий CyberWRT и добавлен в trunk OpenWRT.

 Опубликовано в 23:36

  4 комментария в “Реализация многопоточности в Lua”

  1. Добрый день! Подскажите пожалуйста, как прикрутить lualines к LUA Development Tools?

  2. Здравствуйте.
    Сам не пользовался этой средой, но думаю к среде разработки библиотеки не должны привязываться.
    Есть способ установки с помощью luarock (описано на оф сайте). После установки, библиотека должна быть доступна. В линуксе я устанавливал собранным deb пакетом.

  3. “Есть способ установки с помощью luarock…” – ничего не получилось… И ОС у меня Windows 7, да и Visual studio тоже нет… Я так и не понял как установить lualanes с помощью luarock…((( Не то чтобы я тупой, просто я не являюсь профессиональным программистом, поэтому эти пакеты для сборки для меня тёмный лес. Я так понимаю, на выходе у меня должно получиться 2 файла: core.dll и lualanes.lua Потом их надо разложить в правильные места и из под LUA Development Tools обращаться к этой библиотеке. А у Вас случайно нет готовых библиотек из пакета lualanes?

  4. Извините за долгое молчание. Пропустил оповещение о новом комментарии…

    Вариантов тут несколько:
    1) Установить Visual Studio
    2) Работать в линуксе
    3) Искать собранную под винду в интернете (у меня их к сожалению нет, я давненько перешел на линукс)

    Если соберете библиотеку – поделитесь, я прям тут прикреплю файл. Может поможем тем, кто будет сталкиваться с аналогичной проблемой.