C 取消阻止连接到套接字是否会导致上下文切换?

C 取消阻止连接到套接字是否会导致上下文切换?,c,winapi,sockets,winsock,C,Winapi,Sockets,Winsock,我正在使用winsock并在非阻塞套接字上调用connect。当CPU被其他进程占用时,在函数返回之前,我偶尔会看到一些延迟(高达200毫秒)。据我所知,非阻塞套接字上的connect应该会立即返回,但可能connect会导致上下文切换,并且由于CPU正在努力工作,因此线程需要一段时间才能再次获得CPU并退出函数 我知道(或至少相当肯定)阻塞套接字上的connect会导致上下文切换,但非阻塞套接字上的connect会导致上下文切换吗?非阻塞调用根据其定义不会导致上下文切换。但是,上下文切换可能会

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

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

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


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

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


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

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