实际上我正在使用java来监控某个java进程的cpu使用情况。这是我的问题: 首先,是否存在一个限制,即单个进程只能在1个或有限的cpu核心上消耗cpu处理时间?或者它可以在每个cpu核心上使用cpu时间? 其次,如果我想监视每个cpu核心的某个java进程的cpu使用情况,我该怎么做呢? 而且我更喜欢使用纯java而不是本机方法来处理它。
答案 0 :(得分:0)
对于操作系统,单个线程(我假设是“Java进程”的意思)本质上不能在多个“处理器”上使用CPU(这可能意味着也可能不意味着一个物理核心 - 见下文)。
通常,每当给定的线程“运行时转向”时,Windows(我假设其他操作系统)将尝试将给定的线程安排到它上次运行的同一个“处理器”上。
然而,超级读取CPU的情况变得复杂,CPU实际上向操作系统提供了几个“处理器”,实际上是单核心物理核心。在这种情况下,实际上CPU本身在任何时候在给定内核的哪个组件上运行什么线程的指令之间切换。 (因为,例如,核心的算术单元可能正在执行线程1的算术指令,而加载/存储单元正从存储器中获取线程2的指令等)。
因此,考虑到这种情况的复杂性,即使您可以获得每核测量,我也不完全确定您将附加到它们的有用意义
P.S。如果您允许插件,我不知道几年前我写的这个Java-focussed article on thread scheduling是否有用。我应该说我是在Windows 7或最新的Intel Core CPU发布之前写的,并且可能会有一两个相关信息的更新(特别是,我没有解决可变核心速度和这怎么会影响调度。)