线、进程及锁

线、进程使用

什么是线程?什么是进程?二者有什么区别?

进程:是资源分配最小的单位
线程:是进程的一部分,也是cpu调试的最小单元,线程共享进程的资源,多个线程可以共享同一地址空间和其他资源,比如共享全局变量。
线程,是运行在进程当中的

锁机制

保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。

可以理解为内存中的一个整型数,拥有两种状态:空闲状态和上锁状态。加锁时,判断锁是否空闲,如果空闲,修改为上锁状态,返回成功。如果已经上锁,则返回失败。解锁时,则把锁状态修改为空闲状态。


死锁的概念
两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象

永远在互相等待的进程称为死锁进程。死锁的原因包括系统资源不足、进程运行推进顺序不合适、资源分配不当等。

比如两只羊过独木桥。进程比作羊,资源比作桥。若两只羊互不相让,争着过桥,就产生死锁。

互斥锁
lock = threading.Lock()
上锁lock.acquire()
释放锁lock.release
死锁的必要条件
四个必要条件: 
- 互斥条件:一个资源每次只能被一个进程使用。 
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 
- 不剥夺条件: 进程已获得的资源,在末使用完之前,不能强行剥夺。 
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。存在一个进程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一资源,……,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。
线程
from threading import Thread

def fun(number):
    return number ** number

# 新建、启动、等待结束
t=Thread(target=func, args=(100, ))
  t.start()
  t.join()
线程
from threading import Thread


def task(msg):
    print(msg)


for i in range(6):
    Thread(target=task, args=(i,)).start

线程池使用
from concurrent.futures import ThreadPoolExecutor

pool = ThreadPoolExecutor(10)


def task(msg):
	print(msg)


for i in range(107):
    pool.submit(task, i)

线程锁

lock.acquire()
Thread(target=task, args=(i,)).start()
lock.release()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值