我有一个正在侦听端口的 TCP/IP 线程(主线程)。当 TCP/IP 请求到来时,我会生成一个线程来处理该请求。如果工作线程是 CPU 绑定的(想象一个从 1 到 1000000 的循环什么都不做),我无法接收另一个 tcp/ip 请求。SO 不会给监听线程一个切片时间。
我怎么解决这个问题?这是一个实施问题吗?当 tcp/ip 数据包进入 tcp/ip 堆栈时,SO 必须给监听线程一个切片时间吗?
谢谢!
我有一个正在侦听端口的 TCP/IP 线程(主线程)。当 TCP/IP 请求到来时,我会生成一个线程来处理该请求。如果工作线程是 CPU 绑定的(想象一个从 1 到 1000000 的循环什么都不做),我无法接收另一个 tcp/ip 请求。SO 不会给监听线程一个切片时间。
我怎么解决这个问题?这是一个实施问题吗?当 tcp/ip 数据包进入 tcp/ip 堆栈时,SO 必须给监听线程一个切片时间吗?
谢谢!
使用 WinAPI 函数SwitchToThread()
或Sleep(0)
在工作线程中,以便将其时间片放弃给系统中的其他线程/进程。或者在 Delphi 中,使用TThread.Yield
.