进程、线程、并行、并发、串行、进程池
进程
什么是进程?
开发时编写的代码,我们称为程序。
当我们运行一个程序,那么我们将运行的程序叫做进程。
进程是线程的容器。
程序与进程的区别
程序是数据和指令的集合,是静态的概念,就是一堆代码。
进程是程序运行的过程,是动态的概念,进程存在生命周期,会随着程序运行的终止而销毁。
进程之间通信
进程之间通信通过TCP/IP端口实现。
线程
什么是线程?
线程是操作系统可以进行运算调度的最小单位。
它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是,进程中单一顺序的控制流,一个进程可以并发多个线程,每一条线程并行执行不同的任务。
进程与线程的关系
进程包含线程,线程是进程的子集。
例子: 我们打开一个聊天软件,这就是开启了一个进程;当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置...,这些操作就是线程。
进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了。
一个程序至少有一个进程,一个进程至少有一个线程.
一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
并行、并发、串行
并行
多个任务在同一时刻同时进行。
并行,必须要有多核才可以实现,否则只能实现并发(伪并行)。
并发(伪并行)
一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用。
看起来是同时进行, 这是一种假并行。
单核下使用多道技术实现。
串行
同一时刻只能运行一个程序,如果存在多个程序,就要按照先后顺序执行。
如单核CPU,打开qq以后,就不能同时打开微信,只能等qq关闭之后,才可以打开微信。
进程池
什么是进程池?
进程池是资源进程,管理进程组成的技术的应用。
为什么要有进程池?
如果成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?
创建进程需要消耗时间,销毁进程也需要消耗时间。即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。
因此我们不能无限制的根据任务去开启或者结束进程。
那么我们要怎么做呢?
进程池的概念
定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务。
等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务。
如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。
也就是说,进池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行。
这样不会增加操作系统的调度难度,还节省了开关进程的时间,也一定程度上能够实现并发效果。
资源进程
预先创建好的空闲进程。
管理进程
管理进程负责创建资源进程,把工作交给空闲资源进程处理,回收已经处理完工作的资源进程。
资源进程与管理进程的交互
通过IPC,信号,信号量,消息队列,管道等进行交互。