condition

并发:同时处理多个请求,但是内核采用轮询时间片的方式逐个访问,某一时间点实际只处理一个任务

比如:IO多路复用,协程,循环服务器,单线程

 

并行:使用多个内核,同时执行多个任务

比如:多进程 多线程

======================================================================

condition 条件变量

创建条件变量对象

con=threading.Condition()

con.acquire();对资源加锁,加锁后其他位置再加锁,则阻塞

con.release():解锁

con.wait():要求wait函数只能在加锁的状态下使用。

    wait函数会先解锁(release),然后让线程处于等待通知的阻塞状态。

con.notify():发送通知,其他线程接收到通知后,结束wait阻塞,并且执行acquire加锁操作

import threading
import time
import datetime

num=0

#条件变量
con=threading.Condition()

class Gov(threading.Thread):
    def run(self):
        global num
        con.acquire()
        while True:
            print("开始拉升")
            num+=1
            print("拉升到%d"%num)
            time.sleep(2)
            if num==5:
                print("差不多了")
                con.notify()
                print("准备收割")
                con.wait()
        con.release()
        print("========")        

class Consumer(threading.Thread):
    def run(self):
        global num
        con.acquire()
        while True:
            if num>0:
                print("开始收割")
                num-=1
                print("下降到%d"%num)
                time.sleep(2)
                if num==0:
                    print("OH,My GOD!!!")
                    con.notify()
                    print("come on baby")
                    con.wait()
        con.release()
        
t1=Gov()
t2=Consumer()
t1.start()
t2.start()                    
            
yangrui@ubuntu:~/num6$ python3 condition.py 
开始拉升
拉升到1
开始拉升
拉升到2
开始拉升
拉升到3
开始拉升
拉升到4
开始拉升
拉升到5
差不多了
准备收割
开始收割
下降到4
开始收割
下降到3
开始收割
下降到2
开始收割
下降到1
开始收割
下降到0
OH,My GOD!!!
come on baby
开始拉升
拉升到1
开始拉升
拉升到2
开始拉升
拉升到3
开始拉升
拉升到4
开始拉升
拉升到5
差不多了
准备收割
开始收割
下降到4
结果

 python线程之GIL(全局解释器锁)

GIL问题:由于pytho的全局解释器锁造成python的多线程执行效率低下

解决方法:

*使用多线程,使用多进程

*不使用c 或者c++做解释器

*python线程适合高延时的IO操作,如网络IO,但不适合CPU密集型程序

转载于:https://www.cnblogs.com/sike8/p/11164335.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值