2013-04-08 2 views
2

Я относительно не новичок в потоковом и асинхронном программировании в целом, но я пытаюсь понять различие между ними как относящееся к GIL в CPython.Темы против асинхронного выполнения в Python

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

+0

Возможно, этот вопрос может быть полезен [this SO] (http://stackoverflow.com/questions/1190206/threading-in-python)? – nvlass

ответ

1

GIL выполняет только роль при выполнении функций вызова кода на языке питона, которые реализованы в C, например, GIL не должен мешать afaik. Кроме того, загрузка файлов или перемещение файлов с диска может выполняться одновременно с потоками python.

Цитата из Python Wiki:

Обратите внимание, что потенциально блокировать или Продолжительные операции, такие как ввод-вывод, обработки/изображений, и номер NumPy хруста, произойдет за пределами GIL. Поэтому только в многопоточных программах много времени проводят внутри GIL, интерпретируя байт-код CPython, что GIL становится узким местом.

Возможно, вы посмотрите на модуль multiprocessing, который позволяет вам преодолеть GIL и использовать несколько ядер на машине. Кроме того, продолжается работа над тем, чтобы PyPy, альтернативный Python Interpreter, в какой-то момент стал GIL-less (просто найдите STM/AME).

Смежные вопросы