Почему не там никакой GIL в виртуальной машине Java? Почему для Python нужен тот настолько плохо?

Изучение C или C ++ было бы более трудным, но вы, вероятно, стали бы гораздо более привыкшими к основам, что никогда не было бы плохо.

При этом, я не уверен насчет "желательного", но это не будет "неправильно" ... скорее вопрос предпочтения.

174
задан AgentLiquid 14 June 2009 в 01:12
поделиться

3 ответа

Python (the language) doesn't need a GIL (which is why it can perfectly be implemented on JVM [Jython] and .NET [IronPython], and those implementations multithread freely). CPython (the popular implementation) has always used a GIL for ease of coding (esp. the coding of the garbage collection mechanisms) and of integration of non-thread-safe C-coded libraries (there used to be a ton of those around;-).

The Unladen Swallow project, among other ambitious goals, does plan a GIL-free virtual machine for Python -- to quote that site, "In addition, we intend to remove the GIL and fix the state of multithreading in Python. We believe this is possible through the implementation of a more sophisticated GC system, something like IBM's Recycler (Bacon et al, 2001)."

219
ответ дан 23 November 2019 в 20:32
поделиться

JVM (по крайней мере, точка доступа) действительно имеет концепцию, аналогичную "GIL", только она намного более тонкая по степени детализации блокировок, большая часть из них исходит из более продвинутых GC в горячей точке .

В CPython это одна большая блокировка (вероятно, не совсем так, но достаточно для аргументов), в JVM она более распространена с различными концепциями в зависимости от того, где она используется.

Взгляните на, для Например, vm / runtime / safepoint.hpp в коде точки доступа, который фактически является препятствием. Оказавшись в безопасной точке, вся виртуальная машина остановилась в отношении Java-кода, так же, как виртуальная машина python останавливается в GIL.

В мире Java такие события приостановки виртуальной машины в этих точках известны как «остановка мира». свободно работает только собственный код, связанный с определенными критериями, остальная часть виртуальной машины остановлена.

49
ответ дан 23 November 2019 в 20:32
поделиться

В этом сообщении в блоге ниже есть комментарий http://www.grouplens.org/node/244, который намекает на причину, по которой было так легко обойтись без GIL для IronPython или Jython, это то, что CPython использует подсчет ссылок, тогда как другие 2 виртуальные машины имеют сборщики мусора. .

Я не понимаю точной механики, почему это так, но это действительно похоже на правдоподобную причину.

6
ответ дан 23 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: