Расскажи про локи и семафоры. Для чего нужны локи, в чём разница между многопоточным и асинхронным режимом?
Ответ от нейросети
sobes.tech AI
Локи (mutex) и семафоры — это механизмы синхронизации для управления доступом к общим ресурсам в многопоточных или конкурентных программах.
Лок (mutex) — это примитив, который позволяет только одному потоку (или задаче) владеть ресурсом в конкретный момент времени. Если другой поток пытается захватить лок, он блокируется до освобождения.
Семафор — более общий механизм, который позволяет ограничить число одновременно работающих потоков с ресурсом. Например, семафор с счётчиком 3 позволит одновременно работать трем потокам.
Разница между многопоточным и асинхронным режимом:
- Многопоточный режим — это когда несколько потоков ОС выполняются параллельно или конкурентно, каждый может блокироваться и ждать.
- Асинхронный режим (например, async/await) — это кооперативная многозадачность, где задачи не блокируют поток, а при ожидании операции передают управление обратно планировщику.
В многопоточном режиме локи и семафоры нужны для предотвращения гонок и обеспечения целостности данных. В асинхронном режиме часто используют другие примитивы (например, asyncio.Lock в Python), которые не блокируют поток, а приостанавливают корутину.
Пример локов в Python:
import threading
lock = threading.Lock()
with lock:
# критическая секция
pass
Пример асинхронного локa:
import asyncio
lock = asyncio.Lock()
async def critical_section():
async with lock:
# асинхронная критическая секция
pass