Безопасен ли Ruby's Net :: HTTP? - PullRequest
11 голосов
/ 17 июня 2010

Безопасен ли Ruby Net :: HTTP для потоков?

(За исключением методов version_1_1 и version_1_2, которые явно не указаны)

1 Ответ

3 голосов
/ 18 июля 2014

Я бы на это не рассчитывал.

В 2008 году Мац написал :

Для МРТ (1.8.x) и YARV (1.9.x) каждый реализованный на С метод защищен GIL (Global Interpreter Lock), так что вам не нужно беспокоюсь о. Но это может зависеть от каждой реализации.

Net :: HTTP находится в stdlib, что означает, что он не реализован в C (или, по крайней мере, не полностью реализован в C). Я предполагаю, что примечание matz по GIL все еще верно сегодня, что подразумевало бы, что GIL не будет помещен в Net :: HTTP. Поэтому я сомневаюсь, что это будет потокобезопасно.

К сожалению, я не нашел убедительных доказательств в документах для текущей версии Ruby, хотя считаю, что стоит упомянуть этот бит из Параллелизм в jruby :

По крайней мере эти классы [базовые классы и классы в stdlib] не считается потокобезопасным, и если вы собираетесь изменить их одновременно с другими операциями вы захотите ввести блокировку (например, с Mutex): String, Array, Hash и любые структуры данных происходит от них.

Я чувствую, что было бы лучше не рисковать, добавив блокировки вокруг Net :: HTTP или используя альтернативу с защитой потоков.

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