0

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

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

现在,如果我将大 for 循环拆分为较小的循环,以使 gc 每次从上次运行时的左侧开始,CPU 占用问题似乎不再发生。

这是为什么?

我可以使用任何 API 以编程方式记录/监视线程切换统计信息吗?linux 盒子上没有 valgrind 或 gcc 编译器。

4

0 回答 0