Как переключается контекст в multithreading (многопоточности)
Python
Middle
Без компании
Как переключается контекст в multithreading (многопоточности)
Ответы
В Python переключение контекста между потоками управляется GIL (Global Interpreter Lock). GIL позволяет выполняться только одному потоку за раз, даже на многоядерных системах.
Переключение происходит:
- **По истечению кванта времени** (обычно 5 мс)
- **При операциях I/O** (чтение/запись, сетевые запросы)
- **При явном вызове `time.sleep()`**
Пример:
```
import threading
def worker():
print("Поток начал работу")
# Здесь может произойти переключение контекста
print("Поток завершил работу")
t1 = threading.Thread(target=worker)
t2 = threading.Thread(target=worker)
t1.start()
t2.start()
```
Из-за GIL настоящий параллелизм достигается только в мультипроцессинге (`multiprocessing`). Для CPU-bound задач лучше использовать процессы, для I/O-bound — потоки.