Por que Thread.Sleep () é tão intensivo em CPU?
Eu tenho uma página ASP.NET com este código pseduo:
while (read)
{
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
}
Qualquer cliente que solicitar esta página começará a baixar um arquivo binário. Tudo está bom neste momento, mas os clientes não tinham limite na velocidade de download, portanto, alteramos o código acima para isso:
while (read)
{
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
Thread.Sleep(500);
}
O problema de velocidade está resolvido agora, mas em teste com 100 clientes simultâneos que se conectam um após o outro (intervalo de 3 segundos entre cada nova conexão), o uso da CPU aumenta quando o número de clientes aumenta e quando há de 70 a 80 clientes simultâneos, a CPU atinge 100% e qualquer nova conexão é recusada. Os números podem ser diferentes em outras máquinas, mas a questão é por que o Thread.Sleep () consome muita CPU e existe alguma maneira de acelerar o processo do cliente sem que a CPU suba?
Posso fazer isso no nível do IIS, mas preciso de mais controle de dentro do meu aplicativo.