python 多进程和多线程的区别

时间:2022-05-30 15:01:12

了解线程和进程

进程

  • 程序:磁盘上的可执行二进制文件,并无运行状态。

  • 进程:就是一个正在运行的任务实例(存活在内存里)。

  • 获取当前电脑的CPU核心数:

    pip install psutil 
    >>> import psutil
    >>> psutil.cpu_count()
    4
    • 我的电脑CPU只有一个核心:我同时可以工作几个任务

      • 核心数对应的是计算机同时可以执行的最大任务数

      • CPU切换执行每一个任务,100个任务;中断的执行(切换)速度非常快,人的肉眼是捕捉不到的。

    • 并发:同一时刻可以有多个函数或者多个任务在我的程序里执行;效率更高。

      • apache/nginx:Web服务器,并发服务器。

    • 单进程:我的程序,就是从上到下,这样执行;效率其实不高

    • CPU高 75 - 80

      • 检查进程

      • TCP连接数,Web服务(FTP,webSocket、SQL链接),TCP链接

        • 没有正经的完成三次握手

      • 文件占用太多:打开的文件个数太多,文件处于IO等待状态,磁盘不行了;

        • CPU在处于等待文件读取,1K,CPU在等待IO的过程其实也是真正的工作

        • 一个人在上班的时候,手头没活。

      • 虚拟内存开小了 SWAP 交换分区

        • 逻辑内存:4G

        • 魔兽世界:50G

        • 磁盘额外设置一块空间,暂时保存内存中不处理的数据

          • 8G :20G 2倍

          • 固态:SSD 1T 2-3万左右

    • 线程:轻量级的进程

    • 一个任务会由多个进程同时配合执行。

    • 多进程:

      • 主要的程序会根据自己程序内部的功能去细节去分化新的进程来完成。

      • 任务分化成多个主进程来执行,这就是多进程第一种。

      • 默认的进程之间数据彼此独立,不管是父子进程还是多主进程。

      • 进程之间彼此切换,效率会降低。

    • 多线程:子线程

      • 必须要有一个主进程来创建。

      • 线程共享主进程内所有的数据。

      • 多线程处理数据,会造成数据混淆。

      • GIL锁:Python强制要求线程彼此执行的时候需要维持数据。

      • 线程不需要CPU拿取和释放资源;

      • 多线程是一个轻量级的进程,在操作系统下不会单独的来执行一个线程来作为任务

        • 线程必须要基于一个主进程来创建的

    • Linux下面:经常用的架构,就是多进程。

    • 多线程只是一个功能(小数据量的)可能会采用的。

  • Linux:ps命令

    • ps命令的返回值