参考答案
结论:Go运行时可高效调度1000个goroutine进行IO,不会阻塞OS线程,资源占用低。核心要点:goroutine轻量(初始栈2KB),创建和切换成本低;网络IO时,goroutine阻塞触发runtime.netpoll,底层用epoll/kqueue多路复用,挂起goroutine并释放线程去处理其他G;对比1000个原生线程,上下文切换开销巨大且内存占用高(MB级 each);示例:启动1000个go func(){ http.Get(url) },仅占用少量线程,内存约几十MB。注意:若涉及阻塞系统调用可能占用OS线程,但整体性能良好。