编写一个多线程从0-100循环 java_在线程中的无限循环中,cpu使用率增加到100%...

我在ASP.NET Web应用程序中实现了一个基于Web的聊天平台,我使用类似于长轮询的技术 . 我的意思是我将来自客户端的每个Web请求保留特定时间段(超时)或直到新消息到达,然后将响应发送到客户端 .

我将连接的客户端保留在内存中(字典对象),当有新消息发送到客户端时,我将此消息写入接收方客户端的消息数组中 . 客户端需要发送请求以获取自己的消息,并将此请求保存在内存中的数组中 .

我正在使用异步http处理程序来监听客户端请求,我将Web请求保存在内存中的数组中 . 我使用线程从内存中连续检查新消息(在为每个客户端创建的字典中) .

我不使用.net线程池线程来检查新消息或超时web请求 . 我创建这样的线程:

System.Threading.Thread t = new Thread(new ThreadStart(QueueCometWaitRequest_WaitCallback));

t.IsBackground = false;

t.Start();

在每个线程的QueueCometWaitRequest_WaitCallback方法中,我处于无限循环中:

while (true)

{

...

Thread.Sleep(100);

}

在这个方法中,我正在检查Web请求超时或每个Web请求的新消息,它也保存在内存中的数组中 .

一切都很好,直到我注意到CPU使用率达到了100%的时间 . (在第一个连接的客户端之后的几分钟内)在第一个请求开始时,一切似乎都正常,我的意思是在向客户端返回响应时CPU使用率不高于10% . 但即使有2个客户端,CPU使用率也会增加到100% . 只有在写入客户端请求的响应时,CPU使用率似乎是100% . 如果没有客户端,那么一切都恢复正常(CPU使用率约为0%),直到客户端完成新的Web请求 .

我不太详细地知道线程,但我怀疑我创建并无限运行的新线程 . 这就像操作系统因为它们一直在工作而及时为它们提供更多的CPU使用和资源,并且这个Thread.Sleep(100)不起作用 .

这是QueueCometWaitRequest_WaitCallback()方法:

void QueueCometWaitRequest_WaitCallback()

{

while (true)

{

if (processRequest.Length == 0)

{

Thread.Sleep(100);

}

else

{

for (int i = 0; i < processRequest.Length; i++)

{

Thread.Sleep(100);

// below I am checking for new message or request time out

.................

.................

// If new message or time out I write to response

}

}

}

}

我希望我能解释一下这种情况,我也对任何建议持开放态度(比如以不同的方式实施)

如果你能帮我解决这个问题,我将非常感谢,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值