Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `После этого *определённые системные вызовы*, выполняемые внутри `Fiber`, перехватываются и` и задаёт контекст выполнения.
- Ключевые элементы блока: `join`, `Fiber`, `wait`, они определяют основную логику примера.
- По шагам код выполняется так: `После этого *определённые системные вызовы*, выполняемые внутри `Fib` -> `- `Kernel#sleep`` -> `- `IO#wait_readable`, `IO#wait_writable`, `IO#wait`` -> `- `IO#read`, `IO#write`, `IO#readpartial`, `IO#sysread`, `IO#syswrit`.
- Для корректности важно поведение конкурентности: где блокировка, где ожидание, и как исключаются гонки между задачами.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.
Fiber.set_scheduler(Async::Scheduler.new)
Fiber.schedule do
io = TCPSocket.new("example.com", 80)
io.write "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
response = io.read
puts response
end
Разбор:
- Фрагмент показывает конкретный сценарий, который стартует со строки `После этого *определённые системные вызовы*, выполняемые внутри `Fiber`, перехватываются и` и задаёт контекст выполнения.
- Ключевые элементы блока: `join`, `Fiber`, `wait`, они определяют основную логику примера.
- По шагам код выполняется так: `После этого *определённые системные вызовы*, выполняемые внутри `Fib` -> `- `Kernel#sleep`` -> `- `IO#wait_readable`, `IO#wait_writable`, `IO#wait`` -> `- `IO#read`, `IO#write`, `IO#readpartial`, `IO#sysread`, `IO#syswrit`.
- Для корректности важно поведение конкурентности: где блокировка, где ожидание, и как исключаются гонки между задачами.
- Типичная ошибка при развитии такого кода — смешивать бизнес-правила и инфраструктурные детали в одном месте; лучше разделять ответственность.
Fiber.set_scheduler(Async::Scheduler.new)
Fiber.schedule do
io = TCPSocket.new("example.com", 80)
io.write "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
response = io.read
puts response
end