tornado - 为什么 Tornado 会花时间在 socket.send(data) 中?
问题描述
我正在查看我的 Tornado TCP 应用程序的配置文件,我发现运行事件循环的线程在行中花费了大约 20% 的时间tornado/iostream.py::write_to_fd
和self.socket.send(data)
大约 15%tornado/iostream.py::read_from_fd
的时间在行中self.socket.recv_into(buf)
。
鉴于这些是非阻塞套接字,为什么这需要任何时间?有哪些常见情况需要花费时间?我可以对我的应用程序进行哪些常见优化以提高效率?
解决方案
即使这些是非阻塞套接字,系统调用仍然涉及进出内核模式的上下文切换。除了尽量减少此类调用的数量(例如,通过大批量读取和写入)之外,您无法做很多事情来减少这种情况。
推荐阅读
- swift - 在 Swift 中解码 json 对象
- reactjs - 如何在 ReactJs 中为背景图像添加线性渐变
- c# - HTTPClient 和 HTTPRequest 代码的验证
- python - 在 python 中是否可以仅使用一张表使用 SQL Merge?
- python - 如何防止蟒蛇“闪烁”?
- azure - Azure Builds NuGetToolInstaller 缓存版本已过时,如何更新?
- oracle - 需要检查多个条件以进行 Oracle 查询
- r - 如何从 .Rdata 文件加载单个对象?
- mysql - lvl 系统无法与 mysql 一起使用 - Discord Bot
- python - 区分对象与实例