我可以用socket.fromshare重复使用套接字文件句柄吗



我正在编写一个文件缓存服务器,为web服务器保存静态文件的副本。每当web服务器中的线程需要静态文件时,它就会打开与缓存服务器的套接字连接,并向其发送socket.share()+所需文件名的结果。缓存服务器使用socket.share的结果通过socket.fromshare访问http客户端,并发送静态文件的内容。然后,它关闭http客户端套接字的副本,以及线程与它的连接

我想知道使用socket.detach而不是socket.close是否会自动提高性能?socket.detach的文档是这样写的:

将套接字对象置于关闭状态,而不实际关闭基础文件描述符。将返回文件描述符,并且可以将其重新用于其他目的。

当缓存服务器创建新的套接字时,我是否必须以某种方式显式地使用返回的文件描述符,或者socket模块是否知道现有的可重用文件描述符?

socket.detach仅清除PySocketSockObject结构体上的文件描述符字段。它不以任何方式存储值,这样模块的其他部分就可以知道文件描述符可供重用。

我不知道为什么:

  1. 您正在使用socket.share
  2. 你认为这会提高性能

你说你已经在穿线了。web服务器将被IO绑定。你的大部分时间将被花费:

  • 协商客户端和服务器之间的TCP/IP连接
  • 在磁盘上查找信息(内存?很好,更快!)
  • 从磁盘读取(内存?)并写入插槽

在进行改进之前,您还应该对您的代码进行评测。实际滞留时间是多少?连接?正在从磁盘读取?发送回客户端?

除非您已经做了一些巨大的改进,否则我敢肯定,实际的TCP/IP协商比从磁盘获取信息快几个数量级。

最新更新