2016-12-21 6 views
-1

Новичок на Python и многопоточность.Блокировка ввода-вывода в Python

Я прочитал некоторые статьи о том, что блокирует и не блокирует ввод-вывод, и основное отличие, по-видимому, в том, что блокирование ввода-вывода только позволяет выполнять задачи последовательно, в то время как неблокирующий ввод-вывод позволяет одновременное выполнение нескольких задач.

Если это так, то как блокирующие операции ввода-вывода (некоторые встроенные функции Python) могут выполнять многопоточность?

ответ

2

Блокировка ввода-вывода блокирует поток, в котором он работает, а не весь процесс. (по крайней мере, в этом контексте и на стандартном ПК)

По определению многопоточность не влияет - только текущий поток блокируется.

1

Замок глобального интерпретатора (в cpython) - это мера, установленная на место, так что одновременно выполняется только один активный поток python. Это сделано для предотвращения коррупции переводчика.

Когда происходит операция блокировки, текущий поток дает блокировку и, таким образом, позволяет выполнять другие потоки, когда первый поток заблокирован. Однако, когда связанные с процессором потоки (когда выполняются исключительно вызовы python), выполняется только один поток независимо от того, сколько потоков работает

Интересно отметить, что в python 3.2 был добавлен код для смягчения последствий глобального блокировка интерпретатора. Также интересно отметить, что в других реализациях python нет глобальной блокировки интерпретатора

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