YueGuobin 96d4d82716
perf: cache compute.host_ip + add UDPLink.create timing log
host_ip resolved socket.gethostbyname on every access with no cache.
get_ip_on_same_subnet touches host_ip 2-4 times per link, so opening a
2500-link project issued thousands of blocking DNS calls inline on the
event loop — freezing all concurrent link coroutines each time. This is
the most likely cause of the 12-link/s throughput (1000x below what
Pool(concurrency=100) should deliver) and the burst+pause pattern.

- compute.host_ip: cache the resolution in _host_ip_cache, invalidate
  on host setter change
- UDPLink.create: timing log splitting get_ip / ports / nio so the next
  project-open confirms where time actually goes
2026-08-10 23:20:40 +08:00
..
2026-07-29 18:52:23 +02:00
2026-04-04 19:55:13 +08:00
2026-07-09 08:40:05 +02:00
2024-04-22 18:51:29 +07:00
2026-07-30 12:53:08 +02:00
2022-01-19 22:28:36 +10:30
2026-07-30 19:11:11 +02:00