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阻塞随便用,计算任务别乱用。

相关推荐
东莞市云毅网络有限公司6 小时前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
Sarvartha8 小时前
final 关键字
java·开发语言
数字融合8 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
程序员Sunday8 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
zhangzeyuaaa9 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
Marst Code9 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红10 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
谢亮_vipxieliang10 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
思无邪6611 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能