面试题答案
一键面试1. CPU 密集型计算场景
- 原理分析:Python 存在 GIL,同一时刻只有一个线程能执行 Python 字节码。在 CPU 密集型计算中,如大量的数值计算、复杂的算法运算等,线程频繁获取和释放 GIL,线程切换开销大,多线程无法真正利用多核 CPU 的优势,反而可能因 GIL 的存在降低效率。例如计算斐波那契数列这种纯 CPU 计算任务,多线程执行速度可能比单线程还慢。
2. 对共享资源操作需要复杂同步机制的场景
- 原理分析:虽然线程共享进程资源,但当多个线程对共享资源进行复杂操作时,如共享数据结构(如复杂的自定义对象)的读写,需要精细的锁机制来保证数据一致性。若同步机制设计不当,容易出现死锁、资源竞争等问题。例如多个线程同时对一个共享字典进行添加、删除和查询操作,若没有正确的锁控制,数据可能会出现混乱。
3. 阻塞 I/O 等待时间较短的场景
- 原理分析:虽然 Python 的线程在 I/O 操作时会释放 GIL,但如果 I/O 等待时间很短,使用线程带来的线程创建、调度和管理开销可能大于 I/O 操作本身节省的时间。比如对本地文件进行频繁的小数据量读写操作,单线程按顺序执行可能更高效,使用多线程反而增加系统负担。