【问题标题】:Socket select() Time Switching? [closed]socket select() 时间切换? [关闭]
【发布时间】:2014-01-08 10:26:45
【问题描述】:

我创建了 6 个 Sockets 并同时使用 select 监听所有这些。我想知道 CPU 从一个插槽切换到另一个插槽需要多长时间。有人知道吗;如果没有,有人可以指导我如何计算这个问题!

【问题讨论】:

  • “从一个套接字切换到另一个”是什么意思? select 函数不会在套接字之间“切换”,它会检查哪个套接字接收到活动,从您的角度来看,可以说内核同时检查所有套接字。
  • 您已经尝试过做什么?您是否使用过标准的 Linux 分析工具?见*.com/questions/2229336/linux-application-profiling
  • 我的想法是,如果我的 1_socket 接收到 6 个字节的数据,而我的 2_socket 也接收到 6 个字节的数据,它将首先在 1_socket 上解析,然后切换到 2_socket !!!
  • 什么是“它”?你说的“解决”是什么意思?和“切换”?
  • select 函数可以返回集合中的多个活动套接字。所以1_socket2_socket (根据你的例子)都可能在例如select 返回时的读取集。根本没有“切换”。

标签: c linux sockets tcpsocket


【解决方案1】:

我认为您可能误解了 select 调用的实际作用,select 的手册页说明如下:

三组独立的文件描述符被监视。那些 将观察 readfds 中列出的字符是否变为 可用于阅读(更准确地说,查看阅读是否不会 堵塞;特别是,文件描述符也准备好了 end-of-file),writefds 中的那些将被监视以查看是否有 write 不会阻塞,exceptfds 中的会被监听 例外。 退出时,集合被修改到位以指示 哪些文件描述符实际上改变了状态。三者中的每一个 如果没有文件描述符,则可以将文件描述符集指定为 NULL 将被监视相应类别的事件。

因此,当您对 select 的调用返回时,它会告诉您哪些文件描述符(如果有)(在您的情况下)准备好从中读取。然后由您决定阅读哪些内容以及如何阅读。

如果可以的话,我建议您查找一份 Unix Network Programming(作者 Stevens、Fenner、Rudoff)。这将为您提供网络编程所需的所有背景信息和示例 C 代码。

或者看教程here

【讨论】: