编写了一个示例C++多线程程序,该程序运行10个线程,每个线程设置为高优先级和亲和性.在dell机器上编译并运行此代码,该机器具有16个内核,运行centos 7(Linux内核 - 3.10.0-229),禁用超线程.在我运行此代码之后,几秒钟内,我们的Linux机器变得没有响应,从某种意义上说,如果我打开Eclipse编辑器,保存文件或在vi编辑器中保存文件,那些应用程序就会挂起.有趣的是,一旦我停止了这个程序/过程,那么所有其他应用程序将从他们停止的地方恢复.如果我从这10个线程中删除优先级,我也不会看到这个问题.
问题:
1)在16个内核中,6个内核仍留在机器上(cpu使用情况显示,cpu执行了62.9%的用户空间,并且闲置了37.1%.有趣的是内核空间中0%的cpu使用率),所以理想情况下应该使用内核那6个内核处理其他应用程序,可能是其他应用程序无法运行的原因?如何在不引入睡眠/更改优先级的情况下解决此问题?
2)想知道更好的方法,除了在线程中引入睡眠/等待事件(由于内核上下文切换引入最小延迟)以实现并行性?
跑顶命令(top -H):
%Cpu(s): 62.9 us, 0.0 sy, 0.0 ni, 37.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
1107 arun rt 0 96748 1112 932 R 99.9 0.0 0:25.78 PthreadTest
1115 arun rt 0 96748 1112 932 R 99.9 0.0 0:24.79 PthreadTest
1118 arun rt 0 96748 1112 932 R 99.9 0.0 0:22.79 PthreadTest
1120 arun rt 0 96748 1112 932 R 99.9 0.0 0:20.79 PthreadTest
1123 arun …Run Code Online (Sandbox Code Playgroud)