Родные темы в Ruby 1.9.1, что для меня? - PullRequest
5 голосов
/ 30 июля 2009

Итак, Ruby 1.9.1 теперь объявлен стабильным . Rails должен работать с ним, и постепенно на него портируются гемы.

Он имеет собственные потоки и глобальную блокировку интерпретатора (GIL).

Поскольку GIL существует, предоставляют ли нативные потоки какое-либо преимущество по сравнению с зелеными потоками в 1.9.1?

Ответы [ 2 ]

7 голосов
/ 19 декабря 2009

Потоки в 1.9 являются нативными, но они "замедлены", чтобы позволить одновременно запускаться только одному потоку. Это связано с тем, что это может привести к путанице в существующем коде, если потоки действительно будут работать параллельно.

Плюсы:

  • IO теперь асинхронный в потоках. Если поток блокируется на IO, тогда другой поток продолжит, пока IO не закончится.
  • C расширения могут использовать истинную многопоточность.

Минусы:

  • Любые расширения C, которые не являются поточно-ориентированными, могут иметь проблемы, которые трудно найти при использовании Thread. Невозможно пометить расширение как небезопасный поток, чтобы предотвратить его использование с потоками.
  • Имя класса такое же. Родной класс потоков должен был называться как-то иначе.
  • И что хуже всего, многопоточность на разных платформах работает по-разному! Например, priority() отличается в Solaris, Windows и Linux. Такие вещи, как loop {}, отлично работают в Linux, другие потоки получают шанс на запуск. Однако в потоках Solaris этот поток затягивает время процесса, и вы никогда не выйдете!
5 голосов
/ 30 июля 2009

Я думаю, что большой выигрыш в том, что расширения на основе C могут выпустить GIL . Так, например, адаптер MySQL может довольно аккуратно выполнять долго выполняющиеся запросы к базе данных, не блокируя все остальные потоки Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...