Python требует GIL. Но Jython & IronPython этого не делают. Зачем? - PullRequest
4 голосов
/ 07 августа 2010

Почему вы можете запускать Jython и IronPython без необходимости в GIL, но Python (CPython) требует GIL?

Ответы [ 2 ]

8 голосов
/ 07 августа 2010

Части Интерпретатора не являются поточно-ориентированными, хотя в основном потому, что превращение их всех в многопотоковое из-за массового использования блокировки приведет к крайне медленному однопоточному (исходному) . Похоже, это связано с сборщиком мусора CPython, использующим подсчет ссылок (JVM и CLR этого не делают, и поэтому не нужно каждый раз блокировать / освобождать счетчик ссылок). Но даже если бы кто-то придумал приемлемое решение и внедрил его, сторонние библиотеки все равно имели бы те же проблемы.

Обратите внимание, что расширения, написанные на C, могут фактически избавиться от GIL: http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock

2 голосов
/ 07 августа 2010

Полагаю, потому что библиотеки C, на которых построен CPython, не являются поточно-ориентированными.Принимая во внимание, что Jython и IronPython созданы на основе Java и .Net соответственно.

...