1

我正在使用 winsock 并调用connect非阻塞套接字。当 CPU 被其他进程占用时,我偶尔会在函数返回之前看到一些延迟(最多 200 毫秒)。据我所知,connect非阻塞套接字上的 a 应该立即返回,但可能connect会导致上下文切换,并且由于 CPU 正在努力工作,我的线程需要一段时间才能再次获得 CPU 时间并退出函数。

我知道(或至少相当肯定)connect阻塞套接字会导致上下文切换,但非阻塞套接字会导致上下文切换connect吗?

4

3 回答 3

1

此外,这个调用需要深入内核,这已经意味着花费了一些时间。正如其他人指出的那样:上下文切换可以随时发生。您可以做一些技巧(例如使用稍高的优先级等),但事实是使用非实时操作系统您无法保证分配的时间片、完成某些操作所需的时间等。

于 2009-01-15T10:51:35.620 回答
1

无论是非阻塞连接、阻塞连接还是连接之前/之后的任何时间,都可以随时进行上下文切换。只是在连接过程尚未完成时,非阻塞连接可能会返回。

在任何现代操作系统中,在正常程序运行的任何阶段都可以进行上下文切换。永远无法保证某段代码将不间断地运行。(只有那些对系统非常关键的人才能获得这样的特权)

于 2009-01-15T04:23:38.087 回答
1

根据定义,非阻塞调用不会导致上下文切换。但是,上下文切换可能会立即发生。

我不确定你在这里的意思。“据我所知,非阻塞套接字上的连接应该立即返回。” 一方面,是的,无论连接是否完成,后续代码行都会执行,因此从这个意义上说,它会立即返回。如果您的意思是它会立即返回,因为在它返回之前不会发生上下文切换,那么您将是不正确的。

于 2009-01-15T03:16:04.027 回答