为什么pthread_yield()在大型for循环中不能正常工作?

时间:2012-11-26 04:19:45

标签: c linux pthreads

我有两个线程,一个是接受TCP连接并处理requets,一旦处理完成,它就会在树中的记录上标记一个DELETE标志。 另一个线程基本上在这个树上执行gc,在遍历树的大型for循环中,如果设置了DELETE标志,则删除节点。在每个interation中,我有一个pthread_yield()只是为了防止这个gc线程使用太多的CPU;

现在的问题是,当这个树很大时,gc线程使用了太多的CPU,这反过来导致TCP线程的select()和epol.wait(0)返回时间太长,即使有已经连接等待。

现在,如果我将大的for循环分成更小的循环以使gc从最后一次运行的每次开始的地方开始,那么CPU占用问题似乎不再发生了。

为什么?

我可以用来编程记录/监控线程切换统计信息的任何API吗? linux框上没有valgrind或gcc编译器。

0 个答案:

没有答案