目录
一,CPU核心数,线程数
(一),概念
位宽(32位和64位CPU),位是指的CPU的位宽,更大的位宽有两个好处,一次能处理更大范围的数据运算和支持更大容量的内存。
CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。
线程数是一种逻辑的概念,也就是模拟出的CPU核心数。现在用的大多都是Intel的CPU,一般规律是1:2。
(二),扩展
1,windows怎么查看CPU信息
在cmd命令中输入“wmic”,然后在出现的新窗口中输入
cpu get Name | 表示物理CPU数 |
cpu get NumberOfCores | 表示CPU核心数 |
cpu get NumberOfLogicalProessors | 表示CPU线程数 |
systeminfo | 处理器并表示物理CPU有几个 |
2,linux怎么查看CPU信息
CPU逻辑个数
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
CPU个数查询
cat /proc/cpuinfo |grep "processor"|wc -l
查看每个CPU核心数
cat /proc/cpuinfo |grep "cores"
查看CPU使用率的命令
top
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断占用CPU的百分比
si — 软中断占用CPU的百分比
二,时间片轮转机制
时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
1,我们知道,当一个进程占用cpu太高导致程序死机,在不重启电脑的情况下,kill掉它也是可以解决问题的。那么kill掉进程和重启的区别是什么呢?
重启,我想大概是重新分配,从新执行。
kill:杀掉当前的 ’问题进程‘ 让cpu继续它的工作。
但是这个问题线程导致死机的原因是什么,是占用cpu资源过高。是这个进程的执行时间过长或者说死循环了。按照时间片轮转调度中说的一样:如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。
那么我们知道了,在进程执行时间过长(并且有很大风险占用极高的cpu并由可能导致死机),如果不kill掉进程,那么解决它的方向是让这个进程的部分时间内处于阻塞状态,留给其进程合理的资源,但会牺牲响应时间。
实验下JAVA中四种线程调度方式对于死循环的线程有怎么的效果,以及运行1秒后,cpu占用比例。
public static void main(String[] args) throws InterruptedException {
while (true) {
// new Thread().join(1);//18%
// new Thread().sleep(1);//0.8%
byte[] b = new byte[1];//0%
synchronized (b) {
b.wait();
}
// new Thread().yield();//12%
System.out.println(1);
}
}
三,进程,线程
(一),进程
进程是程序进行分配资源的最小单位,其中包括:CPU,内存空间,磁盘IO等。
同一中的进程中的多条线程共享该进程的全部系统资源。
进程和进程之间是相互独立的,沙箱机制。
(二),线程
线程是CPU调度的最小单位,必须依赖与进程二存在。
每个线程有自己独立的程序计数器,一组寄存器和栈。
一个程序至少有一个进程,一个进程至少有一个线程.
(三),进程与线程的区别
进程 | 线程 | |
定义 | 进程是成勋运行的一个实体(包括:程序段,相关的数据段,进程控制块PCB)的运行过程,是系统进行资源分配和调度的一个独立单位 | 线程是进程运行和执行的最小调度单位 |
活泼型 | 不活泼(只是线程的容器) | 活泼,随时可以创建和销毁 |
系统开销 | 创建,册小,切换开销大,资源要重新分配和收回 | 相对与进程来说仅保存少量的寄存器内容,开销小在进程的地址空间执行代码 |
拥有资源 | 资源拥有的基本单位 | 相对与进程来说进本上不拥有资源,但会占用CPU |
地址空间 | 系统赋予的独立的内存地址空间 | 线程只有相关堆栈(系统栈或用户栈)寄存器和线程控制白哦TCB组成,寄存器可用来存储线程内的局部变量 |
调度 | 仅是资源分配的基本单位 | 独立调度,分派的基本单位 |
安全性 | 进程之间相对比较独立,彼此不会相互影响 | 线程共共享通一个进程下面的资源,可以相互通信和相互影响 |
四,并行,并发
(一),并行
开启运行 线程数量 小于等于 cpu数量 * cpu核心数
(二),并发
开启运行 线程数量 大于 cpu数量 * cpu核心数
(三),区别
假设一个cpu有两个核心,那么并行是指这两个核心同时执行线程,并发是指其中的一个核心利用时间片机制可以执行多个不同的线程。
例如:并行你走着路听着音乐,并发是你走着路,停下来系上鞋带,继续走。
并发的关键是你有处理多个任务的能力,不一定同时。并行的关键是你有同时处理多个任务的能力,并行与并发之间的关键点就是是否能【同时】。
五,吞吐量
(一),概念
吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。
吞吐量,是指在一次性能测试过程中网络上传输的数据量的总和。
对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,在容量规划的测试中,吞吐量是一个重点关注的指标,因为它能够说明系统级别的负载能力,另外,在性能调优过程中,吞吐量指标也有重要的价值。如一个大型工厂,他们的生产效率与生产速度很快,一天生产10W吨的货物,结果工厂的运输能力不行,就两辆小型三轮车一天拉2吨的货物,比喻有些夸张,但我想说明的是这个运输能力是整个系统的瓶颈。
(二),扩展
用吞吐量来衡量一个系统的输出能力是极其不准确的,用个最简单的例子说明,一个水龙头开一天一夜,流出10吨水;10个水龙头开1秒钟,流出0.1吨水。当然是一个水龙头的吞吐量大。你能说1个水龙头的出水能力是10个水龙头的强?所以,我们要加单位时间,看谁1秒钟的出水量大。这就是吞吐率。
吞吐率原指一个业务系统在单位时间内提供的产量(或服务量)。在计算机或数据通信系统,指的是单位时间内通过某通信信道(a communication channel)或某个节点成功交付数据的平均速率,通常以每秒比特数(bps, bits per second )为单位。
就像你做系统,算法很厉害,处理过程也很快,但是吞吐率不高,用户的体验感也还是十分差的,感觉就像木桶原理那样,一个木桶能装多少水,取决于最短的那块木板。
怎么提高吞吐率呢?可以选择多维度增加:化整为零,集群,负载,MQ...
持续更新ing...