我在我的C程序中有一个线程正在做一些工作。我在我的程序中使用 pthread_create()在for循环中多次运行此线程,如下所示。
for (i=0; i<20; i++) {
pthread_create(&thread[i], NULL, thread_run, result_thread[i]);
pthread_join(thread[i], NULL);
}
我还用 pthread_getcpuclockid()跟踪这些线程的cpu时间。即使使用相同的输入,这些线程的CPU时间也可能非常不同。
例如,请参阅下面我记录的一组cpu时间(以毫秒为单位)。
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 btw。
答案 0 :(得分:2)
这里有很多变量,它取决于你的线程代码的功能,甚至是内核的构建方式。如果您的线程正在进行任何系统调用(可能是),那么您要求内核为您执行某些操作,因此您的代码始终不会运行。如果你有一个可抢占的内核,那么你的内核可能会在某个时候决定停止执行你的线程并去做其他事情。甚至可能会进行一些内存交换,在这种情况下,您会发现性能存在很大差异。 简而言之,它是你内核的错,但它正在做它应该做的事情。