• 多线程与多进程


    无论是进程还是线程我们都可以循环开启多条,对于什么时候使用进程什么时候使用线程这个问题上:答案就是,我们在遇到计算密集型问题时使用多进程,遇到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)
  • 相关阅读:
    Run keyword if
    sublime Text如何取消两栏窗口?
    WIN7右键在目录当前打开命令行Cmd窗口
    电脑用HDMI线分屏后,耳机或音箱没声音之完美解决!
    如何解决failed to load the jni shared library问题
    APP测试点
    PHP 根据ip判断其所属地址
    thinkPHP git上传的时候,总是有些文件传不上去,.gitignore解析
    Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous
    tp5导出生成pdf
  • 原文地址:https://www.cnblogs.com/wwthuanyu/p/9971503.html
Copyright © 2020-2023  润新知