sandbox/python/to_thread/with_to_thread.puml
2026-02-10 09:44:15 +03:00

54 lines
1.6 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@startuml scenario2_io_with_tothread
title I/O операция С to_thread() - Event Loop свободен ✅
participant "Event Loop\n(Main Thread)" as EL
participant "Worker Thread" as WT
participant GIL
participant "OS Kernel" as OS
note over EL #90EE90: Event Loop работает
EL -> WT: asyncio.to_thread(requests.get)
activate WT
note over EL #90EE90
**Event Loop СВОБОДЕН!**
Обрабатывает другие задачи
end note
group Event Loop продолжает работу
EL -> EL: await других async задач ✅
EL -> EL: обработка новых запросов ✅
EL -> EL: работа продолжается ✅
end
group Worker Thread делает I/O
WT -> GIL: Захватывает GIL
WT -> OS: socket.recv()
note over WT,GIL #90EE90
🔓 **GIL ОСВОБОЖДАЕТСЯ**
(внутри C-кода requests)
Python интерпретатор ждёт OS
end note
note over OS
Ядро читает данные
с сетевого интерфейса
end note
OS --> WT: Данные получены
WT -> GIL: Снова захватывает GIL
end
WT --> EL: Результат готов
deactivate WT
EL -> EL: получает результат через await
note over EL,WT #90EE90
**Ключевой момент:**
Пока Worker Thread ждёт OS,
Event Loop продолжает работать!
GIL освобождается во время системных вызовов
end note
@enduml