2016-07-14 11 views
2

Возможно ли иметь истинный параллелизм в python из-за присутствия GIL? Насколько я знаю, каждый поток получает GIL перед выполнением, в то время как другие потоки ожидают, пока GIL не будет выпущен. Почему GIL, если это такое узкое местоИстинный параллелизм в Python

+0

См. [Исследование Джил Дэвида Бэйзли] (http://www.dabeaz.com/GIL/) для получения большой информации на эту тему. – mshildt

ответ

5

Python, язык не обязательно обеспечивает соблюдение GIL. Это разные версии языка, которые могут иметь или не иметь GIL.

CPython (де-факто реализация) имеет GIL. Таким образом, вы не можете иметь поистине параллельные потоки, пока используете его. Тем не менее, вы можете использовать многопроцессорную обработку для обеспечения параллелизма. PyPy, еще одна реализация языка также имеет GIL.

Существуют и другие реализации языка Python (например, Jython & IronPython), которые не имеют GIL, и вы можете использовать потоки для выполнения параллельных операций.

Cython имеет GIL, но вы можете освободить его, используя инструкцию with.

Звенья проектов, упомянутых:

Больше ресурсов по этой теме:

+0

Почему cpython решил использовать GIL. Какая польза от GIL –

+0

http://programmers.stackexchange.com/questions/186889/why-was-python-written-with-the-gil –

+1

@FaizHalde: в Интернете есть сотни статей по этой теме –

1

Если вы хотите узнать о GIL в Python, я хотел бы предложить, чтобы начать читать здесь:

https://wiki.python.org/moin/GlobalInterpreterLock

Смотрите раздел Устранение GIL для объяснения, почему питон все еще имеет GIL.

+1

BTW: вы найдете эту информацию по googling «python gil» и нажав на первый результат ... Возможно, быстрее, чем публикация на SO ...;) – Felix