1. Lua / Говнокод #24660

    −3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    return coroutine.create(function(x) 
        while true do
          socket.sleep(1);
          collectgarbage() 
          coroutine.yield() 
        end 
      end)

    Выделил сборщик мусора в отдельный поток, и чтоб он вечно собирал за мной всякую срань, но раз в секунду.
    Ожидание: Поток спит в течении 1 секунды.
    Реальность: Вся программа спит в течении 1 секунды.

    Запостил: 3oJIoTou_xyu, 26 Августа 2018

    Комментарии (13) RSS

    • Видимо, ты не правильно написал код на "Lua".
      Ответить
    • > coroutine
      > поток
      Ну-ну.
      Ответить
      • Загугли
        Ответить
        • Загуглить что корутина не тред и не может выполняться в фоне? Ну я это и так знаю.
          Ответить
          • Lua supports coroutines, also called collaborative multithreading. A coroutine in Lua represents an independent thread of execution. Unlike threads in multithread systems, however, a coroutine only suspends its execution by explicitly calling a yield function. Type thread.
            Ответить
            • Понапишут хуйни, а люди потом путаются...
              Ответить
              • Кто из нас больше всего запутался?
                Ответить
                • Ты. Чтобы корутины юзать как аналог тредов нужны неблокирующие sleep, read, write и т.п. которые yield'ят управление вместо блокировки. И нужен внешний планировщик который будет resume'ить корутины когда сокет готов к чтению или прошло нужное время.

                  Твой socket.sleep() именно так и устроен? Судя по "вся программа спит секунду" -- нет.
                  Ответить
                  • Он не мой. Это из либы сокета.
                    Информативно описано:
                    Freezes the program execution during a given amount of time.
                    Time is the number of seconds to sleep for.
                    Ответить
                  • Кстать надо попробовать стандартный рид
                    Ответить
            • Не знаю, почему их назвали threads, но это никакие не потоки, а простые корутины, вызывающая программа будет ждать, пока корутина не вернёт значение через coroutine.yield. Напишешь корутину с ьесконечным циклом без yield'ы внутри и программа зависнет.
              Ответить

    Добавить комментарий