事件循环运行时,是否应将打印操作委托给线程池执行器?
事件循环运行期间,要不要把打印操作委托给线程池执行器?
正常情况:完全没必要
就拿常见的print()来说,它本质是往标准输出写数据,操作系统会把这些内容先塞进缓冲区,很快就会返回,根本不会长时间卡着事件循环。日常开发里直接在事件循环线程里打印就行,折腾线程池纯粹是多此一举。极端情况:可以考虑委托
要是碰到下面这些特殊场景,再考虑把打印丢去线程池:- 你不是往普通终端打印,而是往慢得离谱的IO设备写(比如网络共享盘、老掉牙的串口,或者日志文件大到缓冲区全满),这时候打印可能真会卡很久;
- 单次要打印巨量数据,字节数大到把系统缓冲区撑爆,写入操作不得不等着;
- 你的程序对延迟要求高到变态(比如高频交易系统),哪怕几毫秒的阻塞都能影响任务调度,这种时候所有非核心的IO操作(包括打印)都可以丢去线程池。
额外建议:用异步日志工具更省心
要是怕打印拖慢事件循环,不如直接用异步日志库(比如Python里的structlog加异步适配器),这类工具会自动处理异步输出,不用你手动折腾线程池,比自己写委托代码靠谱多了。
内容的提问来源于stack exchange,提问作者John Shallow
相关产品推荐
相关产品推荐

