我有一个以消费者为生产者消费者模式的一部分:
简化:
public class MessageFileLogger : ILogger
{
private BlockingCollection<ILogItem> _messageQueue;
private Thread _worker;
private bool _enabled = false;
public MessageFileLogger()
{
_worker = new Thread(LogMessage);
_worker.IsBackground = true;
_worker.Start();
}
private void LogMessage()
{
while (_enabled)
{
if (_messageQueue.Count > 0)
{
itm = _messageQueue.Take();
processItem(itm);
}
else
{
Thread.Sleep(1000);
}
}
}
}
如果我删除
Thread.Sleep(1000);
会导致CPU占用爬升的东西非常高(13%),而不是0%,与设置线程休眠。
此外,如果我实例化的类的多个实例,CPU使用率爬升在13%的增量,其中每个实例。
一个新的LogItem添加了BlockingCollection约每分钟左右(每30秒也许),以及在文件中写入适用的消息。
有没有可能是线程阻塞不知何故从运行其他线程,系统需要以某种方式来弥补?
更新:更新代码,以更好地反映实际的代码