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)

     

     

  • 相关阅读:
    Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    用户画像——“打标签”
    python replace函数替换无效问题
    python向mysql插入数据一直报TypeError: must be real number,not str
    《亿级用户下的新浪微博平台架构》读后感
    【2-10】标准 2 维表问题
    【2-8】集合划分问题(给定要分成几个集合)
    【2-7】集合划分问题
    【2-6】排列的字典序问题
    【2-5】有重复元素的排列问题
  • 原文地址:https://www.cnblogs.com/wuzaipei/p/9766562.html
Copyright © 2011-2022 走看看