Встречается на собеседованиях • сегодня
Есть ли Race condition в асинхронности
Да, race condition возможен и в асинхронном коде, несмотря на отсутствие параллельного выполнения. Это происходит из-за чередования корутин и неатомарных операций.
Пример:
python
import asyncio
counter = 0
async def increment():
global counter
temp = counter
await asyncio.sleep(0) # точка переключения контекста
counter = temp + 1
async def main():
global counter
tasks = [increment() for _ in range(1000)]
await asyncio.gather(*tasks)
print(counter) # может быть меньше 1000
asyncio.run(main())
text
Для защиты используйте:
1. `asyncio.Lock()`
2. Атомарные операции (если возможно)
3. Ограничение доступа к общим ресурсам
Асинхронный race condition сложнее обнаружить, так как он зависит от порядка выполнения корутин, который может меняться между запусками.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы