• Python(0)—多线程与多进程


    1、多线程

      线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,一个进程可以包含多个线程。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。本质上CPU同一时刻只干了一件事,只能执行一个线程。一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令。

      并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。

    2、多进程

      一个程序的执行实例就是一个进程。每一个进程提供执行程序所需的所有资源。(进程本质上是资源的集合)

      每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程。

      某个线程想要执行,必须先拿到GIL(全局解释器锁),我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。 

      每个进程有各自独立的GIL,互不干扰,这样就可以真正意义上的并行执行,所以在python中,多进程的执行效率优于多线程(仅仅针对多核CPU而言)。        
                                    
      所以在这里说结论:多核下,想做并行提升效率,比较通用的方法是使用多进程,能够有效提高执行效率        

    3、线程和进程的区别

    (1)线程共享内存空间;进程的内存是独立的

    (2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

    (3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

    (4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

    (5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程

  • 相关阅读:
    sitemap怎么制作才适合蜘蛛抓取?
    网站高并发优化性能调优总结
    圆柱模板行业B2B站点打造MIP推送+熊掌号推送+历史普通推送插件
    a href="javascript:void(0)" 是什么意思?加不加上有什么区别?
    <a href="#" onclick="history.back();"></a>这样写为什么是对的? -(转)
    form 表单 enctype 属性-(转自w3c)
    关于submit与document.form1.submit();这2个提交的区别
    zf-表单填写以及相关业务流程
    zf-关于把某个地址的svn项目移动到另一个上面的步骤
    zf-关于即将过期提示字符串的修改
  • 原文地址:https://www.cnblogs.com/eilearn/p/9538257.html
Copyright © 2020-2023  润新知