`

Java多线程与CPU核数在资源占用上的关系

 
阅读更多

环境:Linux Redhat 5.4 32位,CPU8核
Java代码如下:

class Loop {
        public static void main(String[] args) {
                for(int i=0;i<7;i++)
                        new Thread(new Runnable(){
                        public void run() {
                                while(true);
                        }
                        }).start();
                while(true);
        }
}
编译后启动,输入top命令可看到:

Tasks: 215 total,   1 running, 214 sleeping,   0 stopped,   0 zombie
Cpu(s):100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16580348k total,  7986304k used,  8594044k free,   577356k buffers
Swap: 16777208k total,        0k used, 16777208k free,  5988556k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18833 flow      18   0 1176m  18m 7620 S 798.5  0.1   2:11.62 java

按1后可显示每个CPU核的情况:

top - 15:02:39 up 15 days,  3:40,  4 users,  load average: 7.17, 2.92, 1.24
Tasks: 215 total,   1 running, 214 sleeping,   0 stopped,   0 zombie
Cpu0  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  : 99.3%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.3%hi,  0.3%si,  0.0%st
Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16580348k total,  7986616k used,  8593732k free,   577396k buffers
Swap: 16777208k total,        0k used, 16777208k free,  5989628k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18833 flow      18   0 1176m  18m 7620 S 793.3  0.1   9:44.87 java

由此可见8个线程占用了8个CPU核的资源,资源达到100%。

我们修改下代码,改成:

class Loop {
        public static void main(String[] args) {
                while(true);
        }
同样按top命令,可看到就只有1个CPU达到100%(注某一时刻可能是核1,过会可能是核2),其他几个CPU核均很小。

由此可见,1个线程只会使用1个cpu核资源,多线程可充分利用物理资源。

看过Mina的童鞋应该知道,Mina的推荐的IoProcessor线程池IO线程数为核数+1就是这个原因。

分享到:
评论

相关推荐

    易语言取进程CPU占用率源码

    在这个场景中,我们讨论的是一个使用易语言编写的源码,用于获取进程中CPU的占用率,甚至还能获取CPU的核心数量,这对于多线程编程和系统资源管理特别有帮助。 首先,我们需要理解什么是CPU占用率。CPU占用率是指...

    高性能服务器CPU核数调整研究.pdf

    本文提出了在系统层面动态调整CPU核数的总体思路,减少许可证占用,与最大作业数匹配,并进行实效分析,得出在实际应用当中非常有实用价值的结论。 (二)几种不符的CPU核数调整方案 (1)Intel超线程技术HT:这种...

    测试消耗CPU和内存资源的工具脚本

    测试消耗CPU和内存资源...3 ---- 单位核数,占用3个核, 如果一共8个核,那么大概占用 3/8=37.5%的cpu资源 1024 ---- 单位M,表示 占用 内存 1G 30 ---- 单位秒,表示 持续运行30秒,然后脚本自动释放CPU资源和内存资源

    javase之多线程技术

    Java中的多线程技术是Java进阶学习的重要组成部分,它涉及到并发编程的理论与实践,旨在提高程序的执行效率和响应速度。以下是对多线程技术的详细解释: 1. **CPU调度算法原理** - **先来先服务(FCFS)**:按照...

    Java多线程优化方法及使用方式

    Java多线程优化方法及使用方式 Java多线程优化方法及使用方式可以分为以下几个方面: 一、多线程介绍 在编程中,我们不可逃避的会遇到多线程的编程问题,因为在大多数的业务系统中需要并发处理,如果是在并发的...

    易语言取CPU处理器个数

    同时,对于多核处理器,了解CPU核心数对于优化多线程程序或者进行负载均衡计算非常关键。 标签中的"GetSy"可能是“GetSystem”的简写,强调了获取系统信息这一动作。在易语言中,除了`GetSystemInfo`,还有其他API...

    Android MTK 手动去设置CPU核数

    在Android MTK设备上,通过ADB手动设置CPU核数和频率可以帮助优化性能,解决因Thermal过高导致的性能下降问题。然而,这些操作需要对Android系统有一定的了解,并且应谨慎进行,因为不恰当的操作可能会对设备稳定性...

    Linux系统:物理cpu数、cpu核数、逻辑cpu数、几路几核几线程、CPU信息详细查询方法

    物理cpu数量,在Linux上查看/proc/cpuinfo,其中的physical id就是每个物理CPU的id,有几个不同的physical id就有几个物理CPU。 grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l cpu核数: 每颗物理CPU可以有1...

    ansys多cpu并行计算设置.pdf

    在本资源中,我们将讨论 ANSYS 多 CPU 并行计算设置的相关知识点。ANSYS 是一款常用的有限元分析软件,用于模拟和分析复杂的工程问题。然而,在进行大规模模拟时,ANSYS 需要占用大量的内存和计算资源,否则可能会...

    完美获取 CPU 的 NUMA节点数、CPU插槽个数 、 核心数 、 逻辑处理器数(线程数)、名字、制造商、指令集、主频、等等

    根据 CPU 核心数和线程数选择合适的多线程策略;而了解 CPU 的指令集则有助于优化软件代码,使其更好地利用硬件特性。 总的来说,全面掌握 CPU 的各项参数是提升系统性能的关键步骤,无论是系统管理员还是开发者,...

    Linux中查看物理CPU个数、核数、逻辑CPU个数的方法

    #### 四、总核数与总逻辑CPU数 **定义:** - **总核数** = 物理CPU个数 × 每颗物理CPU的核数 - **总逻辑CPU数** = 物理CPU个数 × 每颗物理CPU的核数 × 超线程数 **示例:** 假设系统中有2个物理CPU,每个物理...

    利用shell脚本批量获取主机信息 IP地址 主机名 CPU型号 主频 核数 物理内存总大小 磁盘名称 容量

    在IT系统管理中,批量获取主机信息是一项常用的任务,尤其在多服务器环境中,这能帮助我们快速了解系统状态。在Linux系统中,我们可以利用shell脚本来实现这一目标。本篇文章将详细讲解如何编写一个shell脚本来批量...

    java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)

    在Java编程中,获取服务器硬件信息是常见的需求,特别是在系统监控、性能分析或者资源管理的场景下。Siger(可能是“System Information Gatherer”的缩写)是一个可能的库,用于帮助开发者轻松地获取包括CPU、内存...

    gh0st源码-(ddos和cpu核数与开机时间)

    【标题】"gh0st源码-(ddos和cpu核数与开机时间)"涉及的是一个恶意软件的源代码,该软件具有分布式拒绝服务攻击(DDoS)功能,并能获取目标系统的CPU核心数量和开机时间。这里我们将深入探讨gh0st恶意软件、DDoS攻击...

    linux-让多核CPU达到指定的CPU使用率脚本

    在Linux系统中,多核CPU的使用率管理是优化系统性能和资源分配的重要环节。"linux-让多核CPU达到指定的CPU使用率脚本"是一个旨在提升机器CPU使用率的实用工具,它能帮助系统管理员更好地控制和利用计算资源。下面...

    Java多线程的使用

    近在项目里面使用了多线程处理技术,感觉对数据很多批量处理效果蛮好,所以在这里记录下来,给自己一个日子,也分享给大家!  1.首先根据条件得到你的数据集合dataList(此处用dataList表示)  1.1个人觉得如果...

    自动获取服务器系统信息脚本:(操作系统、系统内核、系统架构、CPU型号、CPU核数、显卡型号、内存等等)

    6、CPU核数 7、显卡型号 8、显卡显存 9、总内存 10、jdk版本 11、mysql 版本 12、redis 版本 13、python 版本 14、GCC 版本 15、CUDA 版本 后续有什么可以继续加。大家也可以留言,需要什么我会找时间加到里面,并...

Global site tag (gtag.js) - Google Analytics