当使用线程在C编程时,在Linux shell中,我试图减少线程开销,基本上降低CPU时间(并使其更有效)。线程开销性能
现在在程序中,很多线程正在创建,需要在终止之前完成一项工作。由于相互排斥,只有一个线程可以同时完成这项工作。
我知道它开始前
其他线程必须等待有一个线程做这项工作线程需要多长时间才能完成的工作。他们检查他们是否可以完成这项工作的方式是如果满足一个条件变量。
对于等待的线程,如果它们等待使用条件变量,使用该特定的代码来等待(在A,B,c和d是只是任意的东西,这仅仅是一个例子):
while (a == b || c != d){
pthread_cond_wait(&open, &mylock);
}
这个效率如何? pthread_cond_wait
代码中发生了什么?它是否是一个持续检查条件变量的while循环(幕后)?
此外,由于我知道线程需要多长时间工作,因此我首先强制执行有关最短作业的调度策略,这会更有效吗?或者这并不重要,因为在执行这项工作的任何线程组合中,程序将花费相同的时间完成。换句话说,是否使用最短的工作首先降低了CPU等待的其他线程的CPU开销?由于最短的工作首先似乎减少了等待时间。
你可以重写你的问题,使之clearar?此外,你想知道不使用互斥体,只是手动调节的东西? – speeder 2013-02-24 02:00:58
您需要阅读操作系统教科书。 Condvars和其他同步机制不是while()循环,高效的多线程设计非常难以避免同步,或者如果不可避免的话,尽量减少它的跨度。您正在尝试运行b4步行。 – 2013-02-24 02:01:23
好吧我试图让它更清晰(我编辑了上面的问题)。所以基本上我问的是,如果我使用调度策略先做最短的工作,那么应该尽量减少没有完成工作的线程的等待时间。正因为如此,这是否意味着整体CPU时间减少,因为总的等待时间缩短了?由于任何类型的等待仍然会使用一定数量的CPU时间吗? – omega 2013-02-24 02:07:33