zoukankan      html  css  js  c++  java
  • 多线程与多进程

      无论是进程还是线程我们都可以循环开启多条,对于什么时候使用进程什么时候使用线程这个问题上:答案就是,我们在遇到计算密集型问题时使用多进程,遇到io密集型问题时使用多线程。

      计算密集型问题:计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。

      IO密集型问题:IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用。IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少,因此,用运行速度极快的C语言替换用Python这样运行速度极低的脚本语言,完全无法提升运行效率。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选,C语言最差。

    # coding:utf-8
    
    import threading,time
    
    lock = threading.Lock()
    ls = [i for i in range(10)] #[1,2,3,4,5,6,7,8,9]
    
    # def getValue():
    #     global ls
    #     if len(ls):
    #         a = ls[-1]
    #         print('线程:%s 删除 %s'%(threading.current_thread().name,a))
    #         time.sleep(1)
    #         ls.remove(a)
    
    
    def get():
        global ls
        lock.acquire() # 开始上同步锁
        try:
            if len(ls):
                a = ls[-1]
                print('线程:%s 删除 %s' % (threading.current_thread().name, a))
                time.sleep(1)
                ls.remove(a)
        finally:
            lock.release() # 释放同步锁
    
    
    if __name__=='__main__':
        while True:
            # 开启多线程的方法,我们可以使用循环来开启多线程,及多进程也是如此。
            t = []
            for i in range(1,4):
                t1 = threading.Thread(target=get,name='Thread-%s'%i)
                t.append(t1)
                t1.start()
            # 最后我们循环来等待他们运行结束在执行下面的内容。
            for item in t:
                item.join()
    
            if len(ls) == 0:
                break
        print(ls)

     

     

  • 相关阅读:
    HPU--1189 Ou à
    实数向整数的强制转换
    HPU--1166 阶乘问题(一)
    HPU--1163 大数A+B
    阿斯伯格综合征完全指南各章链接
    思维改变生活第10章、有效沟通
    Mathematica(MMA)闪电入门系列 目录与说明
    第二语言习得理论介绍
    第二语言习得实践方法
    复赛注意事项:关于文件读写的格式
  • 原文地址:https://www.cnblogs.com/wuzaipei/p/9766562.html
Copyright © 2011-2022 走看看