Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Fiber - примеры использования

Fiber - примеры использования 9 года 9 мес. назад #71882

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • Программист RubyОраторПобедитель Сбитой кодировки2 место ГотвУчитель
Fiber(нить) вводят в ступор любого, кто встречается с ними в первый раз. Однако сложного в них почти ничего нет, если их правильно представить. Для начала, я называю их функциями с остановкой, это должно дать некоторую идею. Но давайте лучше рассмотрим на примерах, а именно создадим одну нить, и несколько функций, параллельный вызов который даст тот же результат.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Итак, мы вызвали три разные функции, и вызвали одну нить трижды, и получили эквивалентный результат. Конечно, это легко выполняется, только если порядок фиксированный, но я стараюсь просто передать вам всю суть идеи работы.
Вот еще код, позволяющий посмотреть на файбер, как на более полноценный объект, чем функция.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Здесь у нас одна функция – таймер, которая при каждом вызове возвращает значение, на единицу большее, чем при последнем вызове. Для этого нам требуется глобальная переменная.
Для нитей же не требуются глобальные переменные, т.к. каждая их них обладает своим пространством видимости, сохраняющимся от вызова к вызову, что позволяет сделать множество независимых таймеров. Так же мы видим, как нить возвращает значение, так же, как и функция.
Можно передать значение и в нить, так же, как и для функции.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Ну и на последок – ранее поведение нити было довольно цикличным, но можно задать ему более жесткий порядок не используя глобальных переменных.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Здесь нить проходит целых три фазы, смена которых зависит от условий (причем безвозвратных).
Ну и, наконец, небольшая демка, которая была сделана в разгаре моих попыток объяснить преимущества нитей, смотреть на свой страх и риск. Демо (1.3 МБ VX Ace)

P.S. Важно, если вы ничего не поняли (но довольно хорошо знакомы с Руби), то я полностью перепишу статью. Боюсь, что именно объяснение нитей мне дается с трудом.
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Последнее редактирование: 9 года 9 мес. назад от Amphilohiy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79, Ren310, Dprizrak1, caveman, Lipton, tvorimvsevmeste, Doctor_Bug
Время создания страницы: 0.349 секунд