MST

星途 面试题库

面试题:Python中多线程与多进程性能比较之资源占用

在Python中,多线程和多进程在资源占用方面有什么不同?请举例说明如何在实际代码中观察到这种差异。
45.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

资源占用不同

  1. 多线程
    • 线程共享进程的资源,如内存空间、文件描述符等。每个线程只有自己的栈空间用于局部变量和函数调用,资源占用相对较少。因为线程间共享资源,所以线程间通信相对容易,通过共享变量等方式即可实现。
    • 例如,在一个进程中创建多个线程来处理网络请求,这些线程可以共享进程的网络连接池等资源,不需要每个线程单独维护一份。
  2. 多进程
    • 每个进程都有自己独立的地址空间,包括代码段、数据段、堆、栈等。这意味着进程之间资源不共享,资源占用相对较大。进程间通信相对复杂,需要使用特定的IPC(Inter - Process Communication)机制,如管道、消息队列、共享内存等。
    • 比如,同时运行多个独立的图像处理程序,每个程序作为一个进程,它们有自己独立的内存空间来存储图像数据等,互不干扰。

实际代码观察差异

  1. 多线程示例
import threading
import time


def thread_function():
    for i in range(5):
        print(f"线程 {threading.current_thread().name} 运行: {i}")
        time.sleep(1)


threads = []
for _ in range(3):
    t = threading.Thread(target = thread_function)
    threads.append(t)
    t.start()


for t in threads:
    t.join()

在这个多线程示例中,通过threading.Thread创建线程,这些线程共享进程资源,观察系统资源监视器(如Windows的任务管理器或Linux的top命令),会发现该进程整体资源占用相对稳定,因为线程共享资源。 2. 多进程示例

import multiprocessing
import time


def process_function():
    for i in range(5):
        print(f"进程 {multiprocessing.current_process().name} 运行: {i}")
        time.sleep(1)


processes = []
for _ in range(3):
    p = multiprocessing.Process(target = process_function)
    processes.append(p)
    p.start()


for p in processes:
    p.join()

在这个多进程示例中,使用multiprocessing.Process创建进程,每个进程有自己独立的资源。观察系统资源监视器,会看到每个进程有独立的资源占用情况,随着进程数增加,整体资源占用增长明显,因为每个进程都有自己独立的地址空间等资源。