线程概念:
具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。
进程的概念:1动态概念 2进程是以数据集作区分 3进程有自己的生命周期 4进程具有并发行 5进程间会相互制约 6进程由程序、数据、进程控制块组成(PCB)
进程的特征:1动态 2并发 3独立 4异步 5进程间可交互 6结构,每个进程都有PCB作为数据结构
进程的状态与转换:运行、阻塞,就绪。运行指获得cpu的进程,阻塞指等待外部事件的发生(如等待IO),就绪指未获得CPU
进程控制块的组织:线性结构(进程调度时需要遍历整个PCB表,时间复杂度略高),索引结构(按照进程状态分表存储),链式结构(队列的链式结构,指针总是指向队首,队尾有特殊标志)
进程控制原语:原语是由内核(kernel)控制管理进程的,执行期间具有不可分割的特点。原语包括创建、撤销、阻塞、唤醒、改变进程优先级。其中创建指为进程建立进程控制块,填入相应初始值,主要操作是向PCB申请空闲的PCB,然后根据父进程提供的参数,初始化子进程PCB表目,返回子进程名。撤销指收回以该子进程为根的子进程树,收回占用资源。改变进程优先级原语指:调度进程获得cpu的规则,常考虑的因素有进程类型,进程开始时的静态优先数,进程使用的资源量,等待时间等。
python开线程的有两种方式:直接调用线程和继承,join(等待所有线程完毕)、setDeamon(设置为后台,父线程结束时,子进程直接结束)、通过lock.acquire和lock.release加锁和释放锁【代码实现看代码demo】
全局解释锁(GIL):线程加锁的意思是,pyhton进程内存中只有一个线程在运行(垃圾回收线程等不考虑)。加锁的目的:python后台GC线程进行垃圾回收,清空某个变量的clearing时刻时,多线程的其他线程来给这个变量重新赋值,新赋值的数据就会被删除。为了解决这个问题,python的GIL粗暴的加上了锁。这个问题,在早期的单核时代,对性能的影响不大。在多核时代,使得充分利用多核的性能成为一个难题。
进程的使用中,常用的有互斥递(mutex)、同步锁(信号量,Semaphore)、递归锁(RLock)。详细此处不做赘述。
【参考资料
https://www.cnblogs.com/tianlangshu/p/5224178.html
】