2014-11-29 3 views
0

У меня в моей программе C поток, выполняющий некоторые работы. И я запускаю этот поток несколько раз в своей программе с pthread_create() в цикле, как показано ниже.такой же машина такой же program другой cpu время. Зачем?

for (i=0; i<20; i++) { 
    pthread_create(&thread[i], NULL, thread_run, result_thread[i]); 
    pthread_join(thread[i], NULL); 
} 

Я также отслеживание времени центрального процессора этих потоков с pthread_getcpuclockid(). Дело даже в том же вводе, что время процессора этих потоков может сильно отличаться.

Например, см. Ниже группу времени процессора, которое я записал (в миллисекундах).

0,0051 0,0127 0,0113 0,0106 0,0117 0,0125 0,0120 0,0112 0,0111 0,0193 0,0112 0,0162 0,0036 0,0036 0,0035 0,0036 0,0035 0,0036 0,0036 0,0036

Что Коу Может быть причина этих различий?

Я использую Ubuntu кстати.

+2

Это зависит от многих вещей! Как то, что процессор должен делать, какую другую программу он должен обрабатывать, и так далее. – Rizier123

+2

Почему вы ожидаете, что они будут одинаковыми, когда состояние компьютера будет отличаться каждый раз? –

+0

@ Rizier123 Хм, я измеряю процессорное время каждого потока. Что это связано с другими программами? – Zlol

ответ

2

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

+0

Да, это может быть ядро. Было бы лучше, если бы я измерял только время пользователя, а не время процессора? – Zlol