В обход новых "родных" тем в Ruby 1.9 - PullRequest
2 голосов
/ 19 декабря 2009

Ruby 1.9 имеет потоки, но у них много проблем - самая большая из них заключается в том, что они не работают на одной кроссплатформенности (приоритет ведет себя по-разному, loop {} внутри потока съест весь процесс в Solaris, но не Linux, ни зеленые темы и т. д.).

Однако они присвоили новому классу собственных потоков имя, совпадающее со старым зеленым классом: Thread.

Есть ли способ обойти это надежно? Или собрать ruby ​​1.9 без родных потоков?

Полагаю, я мог бы уронить старый зеленый класс Thread, но я не знаю, позволит ли это расширениям C, которые не являются поточно-ориентированными, работать правильно.

Ciao!

Ответы [ 2 ]

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

Это звучит как ошибка. Если бы вы могли сообщить об этом на Ruby Issue Tracker , это было бы очень приятно. Что касается вашего вопроса, я не думаю, что вы могли бы очень легко изменить, как ruby ​​обрабатывает потоки, но взгляните на опции ./configure (./configure --help) и посмотрите, есть ли что-то связанное там.

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

AFAIK, класс Thread написан на C, поэтому вам придется перекомпилировать версию Ruby, включая предыдущую реализацию. Действительно, могут быть некоторые несовместимости.

У меня нет большого опыта работы с Solaris и Threads. Если вы в основном используете потоки, одним из возможных решений будет использование JRuby вместо стандартной реализации Ruby. JRuby основан на JVM и имеет собственные потоки, сопоставимые со стандартными потоками Java. Я предполагаю, что среда на основе Java будет работать, как и ожидалось, в Solaris.

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