我正在查看Tornado TCP应用程序的配置文件,发现运行事件循环的线程在tornado/iostream.py::write_to_fd
的{{1}}行中花费了大约20%的时间,并且花费了大约15%的时间。在self.socket.send(data)
行的tornado/iostream.py::read_from_fd
中。
鉴于这些是非阻塞套接字,为什么这要花费任何时间?在什么情况下需要花费一些时间,我可以对我的应用程序进行任何常见的优化以提高效率吗?
答案 0 :(得分:1)
即使这些是非阻塞套接字,系统调用仍然涉及将上下文切换到内核模式和从内核模式切换出。除了最大程度地减少此类调用的次数(例如,以较大的批量进行读取和写入操作)之外,您可以采取其他措施来减少这种情况。