Fiber - примеры использования

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

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


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

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

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

P.S. Важно, если вы ничего не поняли (но довольно хорошо знакомы с Руби), то я полностью перепишу статью. Боюсь, что именно объяснение нитей мне дается с трудом.

Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Последнее редактирование: 11 года 9 мес. назад пользователем Amphilohiy.
Спасибо сказали: DeadElf79, Ren310, Dprizrak1, caveman, Lipton, tvorimvsevmeste, Doctor_Bug

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.086 секунд
Работает на Kunena форум