Встречается на собеседованиях • сегодня

Как в мультипотоке работает обращение к памяти

В Python из-за GIL (Global Interpreter Lock) потоки выполняются поочередно, но память у них общая. Каждый поток имеет доступ к одним и тем же объектам в памяти, что требует синхронизации при изменении общих данных.

Пример с синхронизацией:

python
import threading

shared_data = 0
lock = threading.Lock()

def increment():
global shared_data
for _ in range(100000):
with lock: # Блокировка доступа
shared_data += 1

threads = [threading.Thread(target=increment) for _ in range(5)]
for t in threads:
t.start()
for t in threads:
t.join()

print(shared_data) # Без lock результат может быть меньше 500000

text

**Нюансы:**  
- GIL не мешает чтению, но требует синхронизации при записи.  
- Используйте `threading.Lock` или `queue.Queue` для потокобезопасности.  
- Для CPU-задач лучше `multiprocessing`, так как процессы имеют отдельную память.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы