zoukankan      html  css  js  c++  java
  • 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密集型程序

  • 相关阅读:
    Android应用程序与SurfaceFlinger服务的关系概述和学习计划【转】
    Linux内核的LED设备驱动框架【转】
    电源管理-4种休眠方式状态
    linux 管道,输出重定向,后端执行
    find 和grep的区别
    linux启动脚本
    linux启动介绍
    sudo的使用
    ps aux|grep *** 解释
    php图片防盗链
  • 原文地址:https://www.cnblogs.com/sike8/p/11164335.html
Copyright © 2011-2022 走看看