如果将SIGSTOP发送到Web服务器,内核是否只是告诉网络堆栈阻止/休眠与该服务器套接字的所有连接,直到继续执行?服务器超时值似乎无关紧要;它会无限期地等待,但是如何?
请求会无限期地坐在套接字缓冲区中吗?如果Web服务器收到大量请求怎么办?当套接字缓冲区填满时会发生什么?
如果将SIGSTOP发送到Web服务器,内核是否只是告诉网络堆栈阻止/休眠与该服务器套接字的所有连接,直到继续执行?服务器超时值似乎无关紧要;它会无限期地等待,但是如何?
请求会无限期地坐在套接字缓冲区中吗?如果Web服务器收到大量请求怎么办?当套接字缓冲区填满时会发生什么?
Answers:
从不关心进程状态和统计信息的系统的任何部分来看,已停止的进程(即,直到收到SIGCONT才进行调度)与正在运行的进程是无法区分的,但是没有响应特定查询。例如,无论进程是停止还是正在工作(使用CPU时间),但不进行任何系统调用,或者在某些未被网络发起的系统调用中被阻塞,网络堆栈都以相同的方式操作事件(例如,等待从管道读取)等
进程停止时,进程中没有超时。网络堆栈中通常也没有超时:即使机器未收到数据包,机器也已收到该数据包。就TCP传输而言,已接收到数据包,并由应用程序响应。
如果套接字的缓冲区已满,则网络堆栈将开始丢弃数据包。
没有理由说明网络堆栈的行为将取决于进程的状态。该过程可以随时退出停止状态。一个套接字上可能有多个进程在侦听,因此基于进程状态的任何决策都必须考虑所有这些因素。