多线程基础-why为什么使用多线程,what什么是线程,通俗回答

一、为什么使用多线程?

生活中的场景:
cpu比作理发师,顾客比作线程。
在这里插入图片描述
理发师在对顾客A烫发,染发时需要等待一定时间(比如染发需要等10分钟燃料着色),这些空余时间可以对顾客B也进行烫发和染发操作。

使用多线程意义就是对CPU资源的压榨,使cpu利用率更高(理发师:!@#&¥)

二、什么是线程?

  • 什么是程序?

躺在你硬盘上的可执行文件,如.exe结尾的文件

  • 什么是进程?

执行可执行文件后,把程序相关信息load到内存里,就变成了进程。一个程序可以产生多个进程,也可以一个,由程序自己控制。
专业解释:操作系统进行资源分配的基本单位

  • 什么是线程?

一个进程中不同的执行路径就是线程。
程序以线程为单位执行。
先找到main方法,main方法开启了其他线程,线程来回切换,交给cpu执行。
进程是资源分配的基本单位
线程是调度执行的基本单位
多个线程共享一个进程的所有资源

  • 什么是纤程?

用户态线程,可以理解为线程是有内核空间调度的,纤程是由用户空间调度的

三、多线程相关问题

  • 什么是线程的切换

理发师从顾客A切换到顾客B时,需要记录顾客A的状态(进行到哪步了,长啥样子)。不然切换回A的时候就不知道从哪里开始了。线程的切换也同理,把(指令、数据、计数器)包装好放到一个缓存中,切换到另一个线程继续执行。

  • 单核CPU设定多线程是否有意义

有,还是上述例子,理发师只有一位时在阻塞操作(如烫发)就可以服务其他cpu。cpu同理,阻塞操作不需要消耗cpu。就可以让给其他线程运行,充分利用cpu。

  • 线程是不是越大越好

当然不是。比如有一万个客户要理发,理发师只有一个。别说理发了,要记住每个顾客都是一件难事,每个顾客都会等到天荒地老。cpu同理,线程的切换也是需要消耗cpu资源的。因此不是越多越好。

  • 那么线程数设多少最合适

方法:
1.压测实验(实际上经常使用这种方式)设定不同的线程数进行压测
2.根据核数设(也不一定,因为可不止一个程序在运行),比如有8个核就设定8个线程
3.让cpu利用率达到80%是比较合理的选择,公式:
Nthread=NcpuUcpu(1+W/C)
参数解释:
Nthread:线程数
Ncpu:cpu核数
Ucpu:期望cpu利用率(如要利用80%)
W/C:等待时间(阻塞时间)与计算时间的比率
如:8个核,期望80%的cpu利用率,等待时间与计算时间比率1:1
套用公式:
8*(%80)*(1+1/1)=12.8
那么设定12-13个线程是比较合理的选择

问题:W/C如何获得?
可以通过一些工具获得,如JProfiler。(俺也没用过)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值