**
理解程序、进程、线程
**
1.概念理解
程序(programm):一段静态的代码。
进程:资源分配的基本单位
线程:CPU调度的基本单位,是轻量级“进程”。
举例:以手机为例
手机上有很多APP,比如微信,淘宝,QQ等等,它们就相当于是进程,启动他们,将相当于是开启了一个进程,以微信为例,你可以打开聊天对话框,发朋友圈或者玩微信小游戏,这些就相当于是线程。
2.进程和线程的区别:
(1)多个进程之间是相互独立的,而多个线程之间是资源共享的。
(2)一个进程可以包含多个线程。多个线程共享该进程中的方法区和栈,但每个线程拥有自己独立的栈和程序计数器。
(3)创建或者销毁一个线程比创建或者销毁一个进程成本低,因为新创建一个线程,不需要给这个线程分配很多新资源,大部分资源都是和原来的线程共享的,而创建一个进程,就需要给这个进程分配较多的资源。
3.理解多线程并行和并发
并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事。
并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事
4.一个进程中的线程是越多越好吗?
不是。一个进程所能容纳的线程数目是有限的。当线程数目太多的时候,线程并发能力就达到上限了,也就是说部分线程并没有执行,继续增加线程效率也不会提高,甚至可能会拖慢效率(线程调度也是有开销的)。
那一个进程中最多可以容纳多少个线程呢?
(1)CPU个数相关
(2)线程执行的任务类型
任务类型分为两种:CPU密集型和IO密集型
CPU密集型:程序一直在执行计算任务
IO密集型:程序没咋进行计算,主要是进行输入输出操作。
举例:
假设一个主机有4核CPU【两种极端情况】
任务纯是CPU密集型的,此时线程的数目大概就是4个左右;如果任务纯是IO密集型的,理论上,线程数目无限制。
现实中的情况是要介于两者之间,实践中一般需要通过测试的方式来找到合适的线程数。