Я время от времени взламывал Ruby, но я не делал ничего большого или многопоточного. Я слышал, что MRI поддерживает только зеленые потоки, а JRuby поддерживает собственные потоки через JVM. Тем не менее, я натыкаюсь на комментарии в блогах и дискуссионных группах, которые говорят, что «Rails не является потокобезопасным» или что сам Ruby не является потокобезопасным. Например, кто-то заметил, что есть проблема с требованием утверждения. Это звучит немного фундаментально.
Я видел много Java-приложений, которые не обрабатывают параллелизм должным образом, и время от времени мне снятся кошмары о них :-) Но по крайней мере вы можете писать поточно-ориентированные приложения на Java, если Вы действительно знаете, что делаете (это просто нелегко).
Все это звучит довольно тревожно, может кто-нибудь подробнее уточнить - в чем именно проблема и как Rails удается вообще работать, если это так? Могу ли я написать многопоточный код Ruby, который работает правильно, без условий гонки и тупиков? Это переносимо между JRuby и MRI или мне нужно взломать код, специфичный для JVM, чтобы правильно использовать преимущества собственных потоков JVM?
EDIT:
Мне следовало задать два вопроса, потому что люди, похоже, отвечают только на вопросы о потоках рельсов (что само по себе хорошо) и зеленые потоки против нативных потоков. Мои опасения по поводу основных проблем Ruby в отношении потока безопасность на самом деле не решены. Кажется, по крайней мере (неразрешенная?) проблема с требованием в определенных случаях.