JAVA并发之路--线程并发基础(一)

目录

 

一,CPU核心数,线程数

  (一),概念

  (二),扩展

二,时间片轮转机制

三,进程,线程

(一),进程

(二),线程

(三),进程与线程的区别

四,并行,并发

(一),并行

(二),并发

(三),区别

五,吞吐量

  (一),概念

  (二),扩展



 

一,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...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值