zoukankan      html  css  js  c++  java
  • 多任务中进程、线程、协程

    为什么使用多任务?有什么好处?

    答:提高程序执行效率,实现同一时刻可以做二个以上的事情。

    啦啦啦。。。重点来了

    并发:任务数大于CPU核数,每个CPU就要执行多个任务,那肯定忙不过来,多个任务执行就需要排队等待上一任务执行完,才能执行下一任务。

    并行:任务数小于或等于CPU核数,每个CPU就只需只需一个任务(小于时,有的CPU不执行任务)。

    1,线程:CPU调度的最小单位。我的理解是CPU执行代码的那一条线索。

          创建线程:

     1 import threading
     2 
     3 
     4 def f1():
     5     for i in range(100):
     6         print('线程1:{}'.format(i))
     7 
     8 
     9 def f2():
    10     for i in range(100):
    11         print('线程2:{}'.format(i))
    12 
    13 
    14 if __name__ == '__main__':
    15     t1 = threading.Thread(target=f1)
    16     t2 = threading.Thread(target=f2)
    17     t1.start()
    18     t2.start()
    上述结果:线程是相互竞争资源的。

    2,进程:CPU分配资源的最小单位,我的理解是程序运行起来,代码+运行用到的资源为进程。进程有三个状态:就绪态(满足一切条件等待CPU执行),等待态(阻塞等待如:input(),accept(),yield等),执行态(CPU正在执行其功能)

        创建进程:

     1 from multiprocessing import Process
     2 
     3 
     4 def f1(msg):
     5     for i in range(100):
     6         print(msg + ':{}'.format(i))
     7 
     8 
     9 def f2(msg):
    10     for i in range(100):
    11         print(msg + ':{}'.format(i))
    12 
    13 
    14 if __name__ == '__main__':
    15     p1 = Process(target=f1, args=('线程1',))
    16     p2 = Process(target=f2, args=('线程2',))
    17     p1.start()
    18     p2.start()

    3,协程:协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。

        创建协程:

     1 import time
     2 
     3 
     4 def fn1():
     5     while True:
     6         print("----任务1-----")
     7         yield
     8         time.sleep(1)
     9 
    10 
    11 def fn2():
    12     while True:
    13         print("----任务2-----")
    14         yield
    15 
    16 
    17 def main():
    18     work1 = fn1()
    19     work2 = fn2()
    20 
    21     while True:
    22         next(work1)
    23         next(work2)
    24 
    25 
    26 if __name__ == "__main__":
    27     main()
  • 相关阅读:
    2019-1-7 水晶报表
    2018-12-25工作记录 空白行===水晶报表
    2018-7-26-随笔-泛型
    2018-7-20-随笔-转换
    2018-7-18-随笔-接口
    2018-7-17-随笔-params和ref、out用法、事件访问器
    VPS安装metasploit-framework
    Mimiktaz抓取本机密码
    msfvenom生成各类Payload命令
    docker容器开启ssh远程登录
  • 原文地址:https://www.cnblogs.com/hellohorld/p/9718249.html
Copyright © 2011-2022 走看看