首页 > 解决方案 > 为什么 Tornado 会花时间在 socket.send(data) 中?

问题描述

我正在查看我的 Tornado TCP 应用程序的配置文件,我发现运行事件循环的线程在行中花费了大约 20% 的时间tornado/iostream.py::write_to_fdself.socket.send(data)大约 15%tornado/iostream.py::read_from_fd的时间在行中self.socket.recv_into(buf)

鉴于这些是非阻塞套接字,为什么这需要任何时间?有哪些常见情况需要花费时间?我可以对我的应用程序进行哪些常见优化以提高效率?

标签: tornadononblocking

解决方案


即使这些是非阻塞套接字,系统调用仍然涉及进出内核模式的上下文切换。除了尽量减少此类调用的数量(例如,通过大批量读取和写入)之外,您无法做很多事情来减少这种情况。


推荐阅读