进程、线程、协程和全局解释锁[python学习笔记]

线程概念

        具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。

        进程的概念: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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值