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

Поиск по сайту

Результаты поиска по тегам 'Многопоточность'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • ДубоБлог
  • Дача Игоря

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Предложения по улучшению игрового процесса
    • Моды и плагины
    • Жалобы на игроков
    • Ивенты
  • Общение
    • Вопрос-ответ
    • Беседка программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Багтрекер
    • Архив

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 5 результатов

  1. Операционная система LunaOS (Самописное ядро) Всем доброго времени суток. Однажды я решил узнать, как же создать операционную систему в OpenComputers, однако создавать вторую OpenOS я не хотел. Потому пытался придумать "изюминку" своей ОС. Тут пришла мысль о том, чего очень не хватает в ядре OpenOS - многопоточность. Я уже читал на форумах, что данная особенность "не нужна", "нет смысла" и т. п. Однако данная возможность добавит несколько особенностей в OpenComputers: SSH клиент. Подключение к компьютеру; Удаленный рабочий стол; Система пользователей; Сервера; Кластер. Само собой это не полный список возможных программ, которые можно написать в многопоточной системе. Однако это уже большой аргумент, для ее создания. Начал я с реализации многопоточности. Я надеялся, что в Lua есть удобные потоки, через которые данный процесс не вызовет проблем, однако такой возможности не оказалось. Я уже думал забросить создание многопоточности и просто создать операционную систему, а вскоре и совсем забросить создание операционки. Спустя неделю, я все же придумал как реализовать многопоточность и все благодарю моему другу, который не дал мне "опустить руки". Идея пришла не сразу и как и все идеи - в дУше (на самом деле в уборной). На помощь мне пришли coroutine. Среди читающих наверняка есть 3 типа: те кто понял, как все это работает; те кто знает, что такое coroutine, но не знает как на их основе создать псведо-многопоточность; те кто в танке. Настоящая операционная система является многопоточной, хотя процессор - однопоточный. Но как? На самом деле, все достаточно просто. Операционная система переключается с одного процесса на другое через определенные промежутки. Это зоны являются атомарными (неделимыми). Так же я решил поступить и с OpenComputers. Многие думают, что это невозможно, но тут к нам приходят на помощь coroutine'ы. Через некоторое время мне удалось проработать ядро операционной системы. Вот структура операционной системы: Вот диаграмма жизни операционной системы: На данный момент ядро уже почти готово. Уже скоро я начну работать над самой операционной системой. Как только мне будет что показать (помимо исходного кода) я выложу это в этой теме. На данной момент у меня есть к вам несколько вопросов и предложений: [Вопрос] Будет ли иметь смысл данная операционная система? [Вопрос] Какие еще возможности вы хотите предложить? [Вопрос] Из-за многопоточности, прямая работа с компонентами должна быть недоступна. Как вы думаете, стоит ли программно запрещать это. Так же я уже придумал реализацию и буду писать следующие программы: apt-get ssh client and server ftp client and server teamviewer cluster software raid sudo Спасибо за внимание и ждите обновлений! Обновления: Обновление 25.08.2016 (не известно) ==================== Теперь в этой области будут появляться все обновления системы. Обновление 26.08.2016 (22:40) ==================== Реализованы модули control, hardware и signals в ядре. В процессе - исправление ошибок и недочетов. Разработка модуля filesystem. Обновление 27.08.2016 (1:50) ==================== Написана текстовая документация на 50% После завершения и доработок - будет выложен для совместной доработки. P.S. В нем будет виден принцип работы ядра, но я думаю это не столь так важно, ибо отыскать к нему доступ смогут лишь только опытные пользователи OpenComputers. Обновление 29.08.2016 (12:10) ==================== Ядро реализовано. Написание API. Решение проблем с удобством написания программ при работе по SSH.
  2. Всем добрый день. Уже давно хотел предложить создание следующих крутых прог. Я хочу предложить писать программы, представляющие из себя некоторую функцию, которая прописывается в event.listen() и завершается. Выходит что комп по сути свободен, а прога осталась в фоне. А в идеале она ещё закрепляется за другим монитором и клавиатурой освобождая основной монитор и клавиатуру. Таким образом мы можем на первом (основном) мониторе дальше писать проги, или ещё что то запускать и параллельно с этим на втором мониторе у нас будет работать прога на эвентах. Вот пример прог на эвентах, которые теоретически при небольших изменениях в коде способны запускаться параллельно с работой основного компа: Программа для управления редстоун сигналом Redcontrol Программа для прослушки чатбокса Мультиплеерная/одиночная игра Змейка Игра Квантовый куб И те проги, что я ещё не написал, но уже хочу прорекламировать написать на эвентах В чём суть? Эти программы прописываются в эвентах и тупо занимают время компа бесконечным циклом с задержкой Часть кода из проги для прослушки чата: function start() term.clear() event.listen("chat_command",cmd) event.listen("chat_message",msg) while exit do os.sleep(3) -- просто прожигаем время в пустую, вместо того чтобы работать параллельно с компом. end event.ignore("chat_command",cmd) event.ignore("chat_message",msg) end start() Как мы видим мы просто загрузили эвенты и ждём время когда игрок захочет их отрубить (причём отрубает он их с помощью тех же эвентов). То есть теоретически если не задавать цикл - можно параллельно запускать кучи прог, надо лишь распределить под каждую из них свой монитор и параллельный запуск обеспечен. Что об этом думаете пишите в комментах.
  3. Ценою неимоверных усилий удалось портировать уже известную вам библиотеку thread в ОС. Библиотека доступна для скачивания по команде Установка: pastebin get E0SzJcCx /lib/thread.lua [код] По сравнению с версией для СС, библиотека имеет еще две функции, вызываемых без параметров: thread.init() - инициализирует многозадачный режим. Должна вызываться один раз перед вызовом других функций библиотеки. thread.waitForAll() - ожидает завершения всех дочерних потоков. В отличии от СС-версии, дочерние потоки прерываются при завершении родительского. Поэтому, waitForAll следует вызывать в конце основной программы, чтобы дать возможность дочерним завершиться корректно. Функции create, kill и killAll работают аналогично версии для СС. thread.create(f , ...) - создает поток, который сразу же начинает выполняться параллельно основному потоку. При желании можно создать серию потоков, вызвав функцию create несколько раз подряд. В качестве параметра f необходимо указать функцию, содержащую тело потока. После f можно указать параметры, передаваемые ей. Функция create возвращает вновь созданный поток как объект типа нить ("thread"). Значение это может понадобиться если вы захотите прервать принудительно созданный поток. thread.kill(co) - прерывает выполнение параллельного потока. co - завершаемый поток, значение, полученное при вызове функции create. thread.killAll() - прекращает выполнение всех параллельных потоков, за исключением основного. Пример работы с библиотекой: local thread = require("thread") -- Инициализируем многозадачность thread.init() -- Функция, которая выводит строку str несколько раз с интервалом секунда function foo(str,n) for i=1,n do print(str) os.sleep(1) end end -- Запускаем два экземпляра функции с разными параметрами thread.create(foo,"AAA",5) thread.create(foo,"BBB",7) -- Ждем завершения thread.waitForAll() Результат работы программы
  4. Многопоточность в CraftOS легко реализуется при помощи стандартной библиотеки parallel. Способ этот отличается простотой и может быть использован даже начинающими программистами. Чего уж проще? Оформи каждый поток в виде отдельной функции и вызови waitForAll или waitForAny. Но такая многопоточность обладает, на мой взгляд, несколькими несущественными недостатками. Во-первых, пока работает parallel, основная нить программы приостанавливается и занимается исключительно обслуживанием параллельных потоков. Во-вторых, функции, содержащие параллельные потоки, обречены вызываться без параметров. В-третьих, после запуска такая параллельность не контролируема. Отсутствует возможность принудительно прервать какой либо из потоков или добавить к уже существующим еще один. Несколько иную многопоточность можно реализовать при помощи библиотеки thread, доступной по адресу http://pastebin.com/32S4HssH Библиотека содержит три функции: thread.create(f , ...) - создает поток, который сразу же начинает выполняться параллельно основному потоку. При желании можно создать серию потоков, вызвав функцию create несколько раз подряд. В качестве параметра f необходимо указать функцию, содержащую тело потока. После f можно указать параметры, передаваемые ей. Функция create возвращает вновь созданный поток как объект типа нить ("thread"). Значение это может понадобиться если вы захотите прервать принудительно созданный поток. thread.kill(co) - прерывает выполнение параллельного потока. co - завершаемый поток, значение, полученное при вызове функции create. thread.killAll() - прекращает выполнение всех параллельных потоков, за исключением основного. Вызывать эту функцию полезно перед завершением программы. В противном случае действующие потоки продолжат свою работу даже после выхода из программы.
  5. Хочу реализовать в своей программке "кое что". Мне нужно распараллелить энное число подобных инструкций id, msg = rednet.receive(). Как это сделать с помощью coroutine? Я просто хочу научиться использовать coroutine. Сколько не втыкал в это, понять не могу, как оно работает.
×
×
  • Создать...