美文网首页
Python进阶之性能之困

Python进阶之性能之困

作者: 不会忘的名字 | 来源:发表于2019-01-16 19:53 被阅读0次

    一.Python垃圾收集 (GC)

    • Garbage Collection (GC)

    python的GC系统任务:为新生成的对象分配内存, 识别那些垃圾对象,并且从垃圾对象那回收内存。
    python采用的是引用计数机制为主,标记-清除和分代收集 两种机制为辅的策略

    • 引用计数机制

    1.python里一切皆对象,它们的核心就是一个结构体:PyObject
    2.PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少, 当引用计数为0时,该对象生命就结束了。


    引用计数.png

    *优点: 简单、实时性高
    *缺点: 消耗资源、循环引用

    • 标记-清除, 分代收集

    用来回收引用计数无法清除的内存(循环引用等)
    垃圾收集具体详解(https://www.cnblogs.com/pinganzi/p/6646742.html)

    二.Python 性能之困

    • 全局解释器锁 ( GIL : Global Interpreter Lock)
    • python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    • GIL并不是Python的特性,它是在实现Python解释器(CPython)时所引入的一个概念。
    • Python代码的执行由Python解释器来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。
    • 全局解释器锁造成任何时候一个进程中都只有一个 Python 线程能进入 CPU 执行;单个进程无法使用多个 CPU 核心。
      GIL.png

    三.进程、线程、协程

    • 进程
      进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。

    数据集则是程序在执行过程中所需要使用的资源;
    进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。

    • 线程
      线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。线程没有自己的系统资源。
    • 进程与线程的关系

    (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
    (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
    (3)CPU分给线程,即真正在CPU上运行的是线程。

    • 协程
      协程,又称微线程,是一种用户态的轻量级线程。协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置,当程序中存在大量不需要CPU的操作时(IO),适用于协程。

    (1)协程有极高的执行效率,因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销。
    (2)协程是一个线程执行,所以想要利用多核CPU,最简单的方法是多进程+协程,这样既充分利用多核,又充分发挥协程的高效率。

    四, 说说下面几个概念:同步,异步,阻塞,非阻塞?

    • 同步和异步是相对多个任务来说的
      同步: 任务需要一个接一个执行.
      异步: 任务可以同时进行,不需要等待前一个任务完成才执行
    • 阻塞和非阻塞是对于单个任务来说的
      阻塞: 看单个任务会不会卡在某个阶段.
      非阻塞: 不会去等待IO的返回.

    五.并行和并发

    并行:同时运行,只有具备多个cpu才能实现并行。
    并发:是伪并行,即看起来是同时运行,单个cpu+多道技术。

    多道技术:内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,即伪并发,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)。


    并行并发.png

    具体解释(https://www.cnblogs.com/xuyaping/p/6825115.html)

    相关文章

      网友评论

          本文标题:Python进阶之性能之困

          本文链接:https://www.haomeiwen.com/subject/jcqzrqtx.html