- 1
- 2
- 3
- 4
- 5
- 6
- 7
return coroutine.create(function(x)
while true do
socket.sleep(1);
collectgarbage()
coroutine.yield()
end
end)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−2
return coroutine.create(function(x)
while true do
socket.sleep(1);
collectgarbage()
coroutine.yield()
end
end)
Выделил сборщик мусора в отдельный поток, и чтоб он вечно собирал за мной всякую срань, но раз в секунду.
Ожидание: Поток спит в течении 1 секунды.
Реальность: Вся программа спит в течении 1 секунды.
> поток
Ну-ну.
Твой socket.sleep() именно так и устроен? Судя по "вся программа спит секунду" -- нет.
Информативно описано:
Freezes the program execution during a given amount of time.
Time is the number of seconds to sleep for.
Это хорошо, если задачи изолированы. А если нет, то многозадачность заставляет думать о всяком говне вроде критических секций и синхронизации. Асинхронная малозадачность позволяет программисту НЕ думать о взаимодействии между потоками.
Оба пути полезны. Надо использовать многозадачность и малозадачность в тех случаях, где они действительно нужны. Например, в программе с графическим интерфейсом основная логика будет построена на малозадачности, чтобы не думать о синхронизации и т.п., а для тяжёлых изолированных задач, запускаемых по кнопке - использовать многозадачность.
Я ещё за то, чтобы отменить защиту памяти, тогда можно будет срать по произвольному адресу, как в «DOS».
Давайте любой код исполнять в нулевом кольце, чтобы сразу с обращением к I/O из юзерского кода.
Решили объединить худшие стороны кооперативной и вытесняющей многозадачности?
Не я это придумал. Сопрограммы в луа меют тип "поток"