【发布时间】:2011-04-07 02:15:52
【问题描述】:
我有一个正在侦听端口的 TCP/IP 线程(主线程)。当 TCP/IP 请求到来时,我会生成一个线程来处理该请求。如果工作线程是 CPU 绑定的(想象一个从 1 到 1000000 的循环什么都不做),我无法接收另一个 tcp/ip 请求。SO 不会给监听线程一个切片时间。
我该如何解决这个问题?这是一个实施问题吗?当 tcp/ip 数据包进入 tcp/ip 栈时,SO 必须给监听线程一个 slice 时间吗?
谢谢!
【问题讨论】:
-
您使用的是哪些组件?
-
我使用的是 Delphi 标准库的 TThread。
-
如果侦听器和工作线程具有相同的优先级,则不可能发生您所描述的 - 操作系统将执行侦听器线程,并且在工作人员正在烧毁您的 CPU 时它将能够接受其他请求或一些核心。确保您实际上是在另一个线程中完成工作任务!否则,您将不会在工作完成之前在侦听器套接字上调用 accept()。也许您应该从侦听器线程中添加一些代码?
标签: windows multithreading delphi cpu-usage worker