2010-11-01 2 views
2

Сколько циклов infinte может обрабатывать процессор с процессором Core 2? им интересно ...Процессорные нити C#

им разработки программного обеспечения, которое я должен иметь петлю 2 infinte внутри как

do{ 
//code 
}while(true); 

мне было интересно, если это собиралось быть полезно для вставки thread.sleep(x) внутри тела, а чтобы освободить некоторое давление на процессор, и если это правда, сколько х должно быть?

+4

0 бесконечных петель. По определению они никогда не заканчиваются. – Oded

+0

Интересно, почему кто-то проголосовал, чтобы закрыть это! – Stacker

+0

@Oded, разве это не зависит от определения «handle»? :) – Constantin

ответ

2

Это зависит от того, что вы пытаетесь сделать. Если вы хотите взять 100% своего процессорного времени, не вставляйте Sleep() s. В другом случае вставьте какое-то значение, которое вам подходит, например, выполните 10 мс работы, а затем Sleep() за 10 мс. Таким образом, вы не будете убивать ваш процессор, и у ОС будет некоторое преимущество, чтобы определить, как планировать рабочие места.

AFAIK, 10 мс - это самый маленький интервал времени в Windows. Кроме того, у вас есть опция Sleep(0), чтобы сообщить ядру (в данном случае менеджер управляемых потоков), что вы хотите, чтобы другие обрабатывали.

+0

, и имейте в виду, что 10mS означает« на LEAST 10mS », на практике часто будет намного больше – smirkingman

+0

Да, он превратит управление в другие потоки и получит его не раньше 10 мс. Есть много других потоков, которые ждут внимания ЦП. –

0

вы также можете попытаться уменьшить приоритет этих потоков, чтобы ваш поток графического интерфейса (если он существует) и другие приложения не зависали.

0

В любом случае современные ОС управляют потоками превентивно, это означает, что если поток находится в бесконечном цикле, он может быть приостановлен ОС и иметь другой поток/процесс, выполняемый на этом ядре. Это означает, что у вас может быть любое количество потоков с бесконечными циклами, и ОС позаботится о планировании. Тем более, если вы выполняете команду Thread.Sleep, это сообщает операционной системе, что вы хотите, чтобы другие потоки могли идти.

1

Если вы просто хотите другой поток будет выполняться в определенный момент исполнения, то:

х должно быть 0 или 1.

Но: 0 только вызовет еще один поток, который будет выполнен, если он имеет более высокий приоритет. 1 будет принудительно выполнить другой поток.

3

Вы должны иметь возможность запускать около 2000 циклов, каждый в своем потоке, до того, как адресное пространство вашего процесса исчерпано. Но см. "If you have to ask, you're probably doing something wrong".

+0

Если это шутка, я не понимаю ее :) –

+0

@ Даниэль Мошмондор, этот ответ пытается чтобы выглядеть как реальный ответ так же сложно, как исходный вопрос пытается выглядеть как реальный вопрос :) – Constantin

1

Сон необходим, если тело нити не вызывает функцию блокировки (например, чтение сокета), которая делает сон для вас. В любых других случаях вам нужно вызвать sleep, иначе ваш поток будет использовать 100% одного процессора, съедая ресурсы.

О том, как большой x должен зависеть от того, что обрабатывается нить (как часто требуется обработка).

+0

теперь да, это то, что я думаю, но да, пока тело действительно открывает http-соединение и отправляет некоторые данные !, но когда я пытаюсь чтобы поставить thread.sleep (200), это сильно влияет на производительность! – Stacker