什么是进程线程
一、计算机的基本结构
计算机的结构就是这位大神设计出来的“冯诺依曼”
冯诺依曼设计的计算机结构一直到现在都在使用,主要组成是:
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
做为java开发人员,在这些硬件中最需要注意的是 CPU(运算器+控制器),刚开始CPU的研发还一直想办法在CPU上堆更多的晶体管以提高CPU的运算速度,后来遇到瓶颈。研发人员就把方向转向了多核CPU。一块CPU上放多个运算单元,那么CPU就可以同时分别计算,从而提高了CPU在同一时间内运算速度。
那么CPU如何同时运算呢?这个其实就是我们常听到的并发编程(同时执行程序),那么这就需要我们程序员来控制执行的操作。
二、什么是进程
进程就是正在执行的程序,以下就是我电脑上正在执行的进程。
进程是系统“资源分配”的基本单位
由于系统上有多个进程,需要管理起来,对Linux操作系统来说,使用称为"PCB"这样的结构体(java中的类)来描述进程信息的.
- 描述通过 结构体/类 ,把进程的各种属性,表示出来
- 组织 通过数据结构,把多个上面的结构体窜起来,简单的认为就是通过链表组织起来,并进行增删改查:创建新的进程(双击exe运行程序),就相当于创建了一个新的PCB结构体加入到链表中。销毁进程,就是把PCB从链表上删除,并且释放PCB结构体。查看刚刚的进程图就是遍历链表,依次显示出对应的信息。
进程就相当于分配了两房间,两个人分别去吃100只鸡,房间桌子鸡就是资源
三、什么是线程
一个进程其实是一组PCB,一个线程是一个PCB,所以进程是包含线程的。
同一进程下的线程共用同一资源(CPU,内存,硬盘,网络带宽……)。
- 线程是系统“调度执行”的基本单位
- 进程是系统“资源分配”的基本单位
做为程序员其实我们真正操作的就是线程
线程比进程更轻,主要在于,创建线程省去了“分配资源”过程。销毁线程,也省去了,“释放资源”过程
线程就像是同一进程下(同一房间下),多个人去吃100只鸡
但是如果资源吃满了,那么就可能会触发异常,导致整个进程崩溃。(吃不到的人就要掀桌子了)
四、进程和线程的区别
- 进程包含线程:一个进程里可以有一个线程,也可以有多个线程,但是不能没有线程。
- 进程是系统“资源分配”的基本单位,线程是系统“调度执行”的基本单位
- 同一进程里的线程,共用同一份系统资源(内存,硬盘,网络带宽……),尤其注意“内存资源”,就是代码中定义的变量/对象,编程中,多个线程是可以共用同一变量的
- 线程是当下实现并发编程的主流方式,通过多线程,就可以充分利用多核CPU,但是,并不是线程数越多越好。线程数目达到一定程度,把多个核心都利用充分之后,此时继续增加线程,无法再提高效率,甚至会影响效率,且一个线程报异常可能会让整个进程崩掉。
- 多个线程之间,可能会相互影响。线程安全问题一个线程抛出异常问题,也可能会把其他线程一起带走
- 多个进程之间,一般不会互相影响。一个进程崩溃了,不会影响到其他进程。(这一点成为“进程的隔离性”)
- 线程比进程更轻,主要在于,创建线程省去了“分配资源”过程。销毁线程,也省去了,“释放资源”过程