- 概念
- 1.进程是系统资源分配的基本单位
- 2.线程是系统调度执行的基本单位
- 进程是包含线程的,每个进程⾄少有⼀个线程存在,即主线程。
- •进程和进程之间不共享内存空间.同⼀个进程的线程之间共享同⼀个内存空间
- ⼀个进程挂了⼀般不会影响到其他进程。但是⼀个线程挂了,可能把同进程内的其他线程⼀起带走(整个进程崩溃)。
进程:打开电脑的任务管理器可以看到很多的进程,进程运行需要有系统资源分配,一个应用程序运行起来就是一个进程,运行结束,进程就结束了;例如idea本事就是一个应用程序,打开idea就可以在任务管理器看到idea这个进程,当在idea里写了一个代码执行起来就可以看到idea给这个程创建了这样的一个线程;
线程
java中对进程的描述比较少,但不是没有,但是为什么java不直接用进程,而是引入多线程呢?主要是如果针对每一个客户端执行后连接上服务器,服务器就会给创建一个进程供客户端使用,客户客户端运行结束,服务器就把进程销毁,咋一看这样好像没什么问题,但是如果这个服务器频繁的有客户端来来去去,就要频繁的创建销毁进程,频繁的分配资源/释放资源,虽然不至于拖垮服务器,但是会使服务器的响应速度变慢;
java引入线程,主要就是为了解决进程创建销毁“太重量“的问题,太重量是因为:分配资源时需要在内存中找到适合的位置才能完成申请,在这过程还要考虑各种而样的问题,是一个比较费时间的问题;
线程又称为”轻量级进程“,线程的创建和销毁开销更小;
线程可以认为是”进程的一部分“;一个进程可以包含一个甚至多个线程;
描述进程一般使用PCB结构来描述的,但实际上一个PCB是在描述线程的,多个PCB结合起来才是在描述进程的;
PCB(描述线程的)
1.pid(每一个线程都不一样)
2.内存指针
3.文件描述表
4.状态,优先级,上下文,记账信息(每一个线程都不一样,这一点可以看一下我写的进程调度(准确来说是线程调度 进程调度));
5.tgid(同个进程中的线程是一样的,根据这个就能知道线程之间是不是同一个进程的)
同个进程中的所有线程的共用内存指针和文件描述表;但是每一个线程是不同的cpu上调度的,但是同一个进程中的线程A中new一个对象,线程B是可以访问到的,线程B中打开一个文件,A也是可以打开的;
为什么说线程是轻量级进程,开销更小呢?核心就在于,创建进程,是可能包含多个线程,在这个过程中涉及到资源的分配/资源释放,在后续创建线程,就省去了分配资源的时间;