python解释器/多线程程序

Python解释器

一、定义

Python解释器 :就是专门用来翻译并执行Python代码 的程序,把你写的.py源代码,逐行翻译成电脑能看懂的机器语言,再运行。

二、工作流程

  1. 写代码:print("hello") 人类能看懂
  2. 解释器逐行读取代码
  3. 翻译成字节码
  4. 交给操作系统/CPU执行
  5. 输出结果

三、和编译器最大区别

  • 解释器(Python)边翻译边执行,逐行跑,不用整体编译
  • 编译器(C/C++)全部翻译完再一次性运行,先生成exe程序

四、最主流3种Python解释器

  1. CPython(默认自带)
    • C语言写的,官方原版
    • 自带GIL全局解释器锁,日常99%人都用它
  2. PyPy
    • 速度极快,JIT即时编译
    • 适合CPU密集计算,速度碾压CPython
  3. Jython / IronPython
    • 对接Java、C#生态,几乎很少用

五、你平时怎么用解释器

  1. 终端输入 python test.py
    → 调用CPython解释器运行脚本
  2. IDE(PyCharm、VSCode)运行代码
    → 底层还是调用本地Python解释器

六、通俗比喻

  • 你写的Python代码 = 外文演讲稿
  • Python解释器 = 同声翻译
  • 电脑 = 听不懂外语的听众
    翻译一句,听众听一句,这就是解释执行

七、面试极简背诵

Python解释器是执行Python代码的核心程序,负责将源代码逐行解析执行;

默认使用CPython ,由C语言开发,存在GIL锁

它属于解释型执行,边解析边运行,无需提前编译。




多线程程序

一、基础概念

  1. 进程:操作系统独立资源单位,一个运行起来的软件就是一个进程(如微信、浏览器),独占内存、CPU资源。
  2. 线程进程里最小执行单元,一个进程里可以分出多个线程,共享进程资源。
  3. 多线程程序一个程序内部,同时开启多条执行线路,一起干活

二、形象比喻

  • 进程 = 一间工厂
  • 线程 = 工厂里的工人
  • 单线程:只有1个工人干活,干完一件再干一件
  • 多线程:同时叫来多个工人一起分工干活,提升效率

三、核心特点

  1. 资源共享
    同一进程下所有线程共享全局变量、内存、文件资源,通信简单。
  2. 切换快、开销小
    创建线程比创建进程轻量很多,占用资源极少。
  3. CPython受GIL限制
    同一时刻只有一个线程真正执行代码 ,只能并发 ,不能多核并行
  4. 存在线程安全问题
    多线程同时修改同一个共享数据,容易出现数据错乱,需要手动加锁。

四、适用场景

适合用多线程

IO密集型任务

  • 网络请求、接口爬取
  • 文件读写、数据库等待
  • 休眠、阻塞等待
    线程阻塞会释放GIL,其他线程立刻运行,效率大幅提升。

不适合多线程

CPU密集型计算

大量循环、数值运算、数据分析

GIL一直占用,无法利用多核,多线程反而变慢,改用多进程

五、单线程 vs 多线程

  • 单线程:顺序执行,串行运行,简单安全,速度慢
  • 多线程:交替并发执行,阻塞时自动切换,IO场景提速明显

六、简单代码示例

python 复制代码
import threading
import time

def work(name):
    for i in range(3):
        print(f"线程{name}执行{i}")
        time.sleep(1)

if __name__ == "__main__":
    t1 = threading.Thread(target=work, args=("A",))
    t2 = threading.Thread(target=work, args=("B",))
    t1.start()
    t2.start()

两条线程同时交替运行,不是顺序跑完A再跑B。

七、线程常见问题

  1. 线程死锁:互相等待对方锁,程序卡住不动
  2. 数据争抢:多线程改同一变量结果出错
  3. 主线程提前退出:子线程还没跑完程序结束
  4. 守护线程:主线程退出,守护线程直接跟着结束

八、面试一句话总结

多线程就是在同一个进程内开启多个执行分支,共享进程资源,轻量高效;

受Python GIL限制无法多核并行,适合IO阻塞类任务,操作共享数据必须加锁保证安全。

极简口诀

多线程同屋干活,共享资源易乱;
IO阻塞随便用,计算任务别乱用。

相关推荐
2301_773643621 分钟前
ceph池
开发语言·ceph·python
两年半的个人练习生^_^1 分钟前
JMM 进阶:彻底理解 CAS 实现原理
java·开发语言
半个烧饼不加肉15 分钟前
JS 底层探究-- 事件循环
开发语言·前端·javascript
极客笔记Jack32 分钟前
Scanpy AnnData 对象深度解析:高效操作数据结构的10个技巧
python
asdfg125896337 分钟前
C 语言中产生伪随机数的标准做法
c语言·开发语言
KobeSacre1 小时前
JUC 概述
java·开发语言
颜酱1 小时前
LangChain调用向量模型,存入向量数据库
python·langchain
2501_928945521 小时前
七本性全面签名体系:从互递归类型到∞-范畴生成语法
python
Jun6261 小时前
QT(2)-通过管道关联CMD
开发语言·qt·命令模式
Deep-w2 小时前
【MATLAB】基于离散 LQR 的车辆横向轨迹跟踪控制方法研究
开发语言·算法·matlab