一、认识进程
1,线程初识
一个可执行程序运行起来,就可以看作是一个进程
进程也是操作系统分配资源的最小单元
一个进程在内核中都会对应一个PCB对象
一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码.
2,进程属性
进程id:身份表示
一组内存指针:指向进程运行时依赖的指令和数据在内存的哪个位置
进程状态:是正在运行,还是正在休眠
进程优先级:这个进程是优先上CPU执行还是放在后面上
进程的上下文:保存了上次进程在CPU上执行的进度,以便下次进程上CPU的时候能够继续执行
进程的记账信息:记录了进程在CPU上一共执行了多长时间,通过这个时间来限制不要让某个进程霸占CPU太久,导致其他进程无法执行
从微观上看,一个CPU同一个时刻只能执行一个线程命令
进程太多,CPU太少
通过“并发”的方式,让CPU快速调度,微观上仍然是串行,但调度上极快,宏观上就感觉是多个进程齐头并进
二、为什么要有线程
首先, "并发编程" 成为 "刚需".
单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU 资源. 有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编程.
其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量.
创建线程比创建进程更快.
销毁线程比销毁进程更快.
调度线程比调度进程更快.
三、认识线程与进程的区别
如果把一个进程看作是一个工厂,线程就是工厂中的若干流水线
线程其实包含在进程中
一个进程可能有多个线程
每一个线程都有一段自己要执行的逻辑(命令),每一个线程都是一个独立的“执行流”
同一个进程中的很多线程之间,是共享一些资源
四、Linux中的线程
1,内核态与用户态
假如你去银行存款,得在窗口和柜员交互
存款的过程:
1、先和柜员沟通,要存多少钱,存在那个账户上
2、把卡和钱交给柜员
以上都是能感知的到动作,相当于代码在用户态执行
3、柜员拿到东西在电脑上操作
以上是用户感知不到的,相当于代码在内核态执行
用户态:权限相对比较小,只能进行一些低风险的操作
内核态:比用户态高很多
2,PCB描述线程
内核只认识PCB
一个线程和一个PCB对应
一个进程可能有多个PCB
这三个PCB就对应了java.exe这个进程的三个线程,内核中也把这若干从属同一个进程称为“线程组”,类似于MySql中的多对一
五、多种类型
以一个比较形象的例子,吃苹果,100苹果分着吃
线程:分配资源,房间+桌子
进程:调度让小朋友去吃苹果
1,单进程单线程
2,多进程单线程
3,单进程多线程
4,多进程多线程
5,进程中线程分析
一个线程中最多有多少个线程
1,CPU的个数有关
2,和线程执行的任务的类型也有关
CPU密集型:程序一直在执行计算任务
IO密集型:主要进行输入输出的操作
多个线程去抢夺一个资源可能造成线程不安全
一个线程如果出现抛出异常,并且没有很好的处理这个异常,整个进程就会被终止,其他线程无法工作
到此这篇关于图解分析Javaweb进程与线程的文章就介绍到这了,更多相关Javaweb 进程 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!