Аналог Fiber
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
EvilCat пишет: я на асинхронных операциях успела собаку съесть.
Ленивый волчонок с большими амбициями
Рассказ "Рождение мага" , периодически обновляется
РПГ История Егеря . Основной текущий проект.
Покой нальёт
Людям всем, и сбежит морок...
Но пока в нём живут,
Но пока в нём растут,
Не видать нам вины
Как неба в крови.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Имеется ввиду запуск исполнения кода блока (функции) в параллельном потоке.EvilCat пишет: setTimeout следует использовать с осторожностью... Я, к сожалению, не до конца поняла, что такое Fiber. Если объясните, попробую подобрать аналог в JS - я на асинхронных операциях успела собаку съесть.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Например, запустил ты функцию:
И переменной temp может пристроиться что-то иное чем 4, если какой-нибудь параллельный поток изменил значение глобальной переменной? Насколько я знаю, обычно когда говорят о параллельности, то подразумевается, что "параллельные" задачи выполняются во время простоя, когда процесс не занят ничем другим. А идущие подряд команды всё равно идут подряд и ничем не прерываются.
Могу ошибаться, ведь несчастную собаку я съела на асинхронных операциях, а не параллельных %) Но их и правда часто путают.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Похоже, в Яваскрипте есть точно такая же технология, поддерживаемая начиная с Хрома 39 (в МВ Хром 41). Почитать о ней можно здесь , но, увы, на английском.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Не соглашусь, что параллельные задачи выполняются только при простое компьютера. Есть такой пример: Ссылка
Без распараллеливания во время подсчетов не был бы доступен интерфейс программы.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Кто-то знает про Fiber! Слава госпади, я их не выдумал!Subzeroy пишет: Есть аналог Fiber в JS ?
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А почему нет? Считается, что одно ядро процессора может обрабатывать два процесса однавременно, так что если архитектура игры позволяет, то почему бы и не запустить какую-нибудь работу в параллели? А проблема доступа к общим ресурсам (переменным) решается мьютексом. Вот например реализация мьютекса для рубиEvilCat пишет: Разве настоящая параллельность возможна в таких средах как игры?
Например, запустил ты функцию:
...
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
По крайней мере этот generator похоже так и работает.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вот пример, как генераторы трудятся у меня на основном проекте (в php):
Эта функция определяет, в каком режиме будет обрабатываться шаблон (частичка веб-страницы). Сначала генератор проверяет, знаем ли мы заведомо, что шаблон кэшируемый, и если да - отправляет "наверх" этот результат. Среда (старший по стэку код) опознаёт возвращаемое как результат и больше не спрашивает.
Но если шаблон не кэшируемый, то нужны дополнительные сведения, и генератор возвращает специальный объект, который результатом быть не может и, следовательно, является зависимостью. Среда смотрит на это, выполняет зависимость когда ей удобно и возвращает управление генератору только тогда, когда его нужда разрешена. Значит, что после строчки yield new... выполнение ставится на паузу, а потом продолжается, когда генератору говорят "продолжи!", со всем прежним контекстом. yield можно даже использовать как точку получения данных от среды (старшего кода), но здесь этого просто не требуется.
Без генератора это пришлось бы записывать как "ад колбэков" или, в моём случае, как объекты, где каждое место для паузы должно обеспечиваться кучей кода и складывания контекста в переменные объекта... Как и было, пока я не догадалась использовать генераторы для этой цели.
[hr]
Также я очень рада за возможность параллельных вычислений в Руби и игровых средах в принципе, но не похоже, что Fiber из этой оперы, потому что они описывается примерно теми же словами, как генератор, и ничего не говорит об изоляции переменных.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Ато было бы печально, если функция никогда не завершится и сохраненное состояние будет копиться с каждой проверяемой страницей.
Или там можно как-то досрочно закрыть выполнение функции через throw или какой-нибудь end?
И что-то я так и не понял, почему бы не использовать return'ы вместо yield?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Что касается того, что происходит с генератором, если он делает yield в начале и больше его никогда не спрашивают... Как только на объект-генаратор не остаётся ссылок, он уничтожается уборщиком мусора по обычным правилам и больше не занимает память.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
