Перейти к публикации
Форум - ComputerCraft

Вопрос

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

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


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

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

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

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

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

 

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

 

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

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


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

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

 

Нет.

 

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

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

  • Like 1

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


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

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

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


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

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

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

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

 

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


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

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

 

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

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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×