Перейти к содержимому
  • 0
Avevad

Многопоточность в Lua

Вопрос

Можно ли в чистой Lua (ну или той которая используется в OC) сделать так чтобы две функции выполнялись ДЕЙСТВИТЕЛЬНО одновременно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

24 минуты назад, Avevad сказал:

Можно ли в чистой Lua (ну или той которая используется в OC) сделать так чтобы две функции выполнялись ДЕЙСТВИТЕЛЬНО одновременно?

Зависит от того, что считать действительно одновременным. Например, при выполнении двух потоков на одном ядре процессора об абсолютной одновременности не может быть и речи. Но переключение между потоками происходит столь быстро, что у человека создаётся иллюзия одновременности.

 

И тогда возникает вопрос: а зачем требуется эта иллюзия? В некоторых случаях разделение программы на отдельные потоки упрощает код. В других случаях появляется возможность выполнять полезную нагрузку в ожидании ответа от медленной периферии. В третьем случае разделение на потоки позволяет использовать множество ядер и процессоров в системе. Тут выполнение и в самом деле может быть одновременным в физическом смысле этого слова. Что требуется в твоём случае?

 

Второй вариант "одновременности" можно было использовать в ComputerCraft, там черепашки могли выполнять вычисления во время своего движения. В OpenComputers, насколько я знаю, подобное пока никому не удавалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
39 минут назад, Avevad сказал:

Можно ли в чистой Lua (ну или той которая используется в OC) сделать так чтобы две функции выполнялись ДЕЙСТВИТЕЛЬНО одновременно?

 

Нет.

 

В OpenComputers для этого надо использовать два отдельных компьютера.

В реальном мире эффективнее всего запустить два потока в основной программе (например на Си) и запустить интерпретатор Луа в каждом из этих потоков (хотя не вижу в этом особого смысла).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тоесть я не могу на ОС'овских компах сделать так чтобы у меня к примеру было два окна: в одном (к примеру) игра, в другом еще одна игра (к примеру)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, Avevad сказал:

Тоесть я не могу на ОС'овских компах сделать так чтобы у меня к примеру было два окна: в одном (к примеру) игра, в другом еще одна игра (к примеру)?

А это как раз можно. Для этого не требуется одновременность, достаточно иллюзии.

Например, есть экспериментальная операционная система WinOS от @RccHD.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, Avevad сказал:

Тоесть я не могу на ОС'овских компах сделать так чтобы у меня к примеру было два окна: в одном (к примеру) игра, в другом еще одна игра (к примеру)?

 

Можешь. Для этого не нужна настоящая многопоточность.

Почитай про корутины в Луа, а также глянь на библиотечку threads из OpenOS.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...