• python--基础知识点梳理(三)深浅拷贝、进线协程、os和sys、垃圾回收机制、读文件的三种方式


    深拷贝与浅拷贝

    import copy

    浅拷贝:将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象。copy.copy()

    深拷贝:将一个对象拷贝到另一个对象中,新开辟了一个空间,这意味着如果你对一个对象的拷贝做出改变时,不会影响原对象。copy.deepcopy()

    进程、线程、协程

    进程process:资源分配的最小单位,一个可执行的程序被加载到内存中。拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度。

    多进程应用于CPU密集,进程间通信的方式:队列queue、管道pip

    线程Thread:操作系统调度的最小单位,进程内的一个执行单元,拥有自己独立的堆和栈,共享堆,不共享栈,也有操作系统调度。线程保存到CPU的栈中

    多线程应用于IO密集。IO操作:将硬盘上、网络上的数据进行读写操作

    协程Coroutine:又称微线程,纤程。单线程下实现并发效果,可以保留上次执行位置,遇到IO自动切换。协程保存在自己的栈。

    协程优点:

      1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级

      2. 单线程内就可以实现并发的效果,最大限度地利用cpu

    协程缺点:

      1.协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程

      2.协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程

    协程常用库:greenlet框架(封装yield的基础库)、gevent(基于greenlet的高级库)。

    IO多路复用:socketserver,多个客户端连接,单线程下实现并发效果

    IO多路复用机制:select、poll、epoll

    # select linux下默认最大连接数1024,监控数量有限,无法知道哪个socket链接活跃,
    # poll 在select基础上没有监控数量限制,
    # epoll 没有监控数量限制并且能知道哪个socket链接有活跃

    os和sys模块

    os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;
    sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

    python垃圾回收机制

    引用计数、标记清除、分代回收

    引用计数:当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1。当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

    标记清除:基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点,以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没有标记的对象释放

    分代回收:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。,那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

    readline、readlines、read

    readline:一行一行的读,底层是迭代器原理,适合大文件读取

    readlines:读取整个文件

    read:从当前位置起读取,一般用于小文件读取

     

  • 相关阅读:
    AngularJS笔记---数据绑定
    Javascript笔记--函数
    C#笔记---动态类(Dynamic)应用
    Javascript笔记--Objects
    Javascript笔记----实现Page页面右下角置顶按钮.
    C#基础---扩展方法的应用
    .Net程序员之Python基础教程学习----函数和异常处理[Fifth Day]
    1.3 函数式接口
    1.2 lambda 表达式的语法
    1.1 为什么要使用lambda 表达式
  • 原文地址:https://www.cnblogs.com/lutt/p/11195165.html
Copyright © 2020-2023  润新知