面试题答案
一键面试资源占用不同
- 多线程:
- 线程共享进程的资源,如内存空间、文件描述符等。每个线程只有自己的栈空间用于局部变量和函数调用,资源占用相对较少。因为线程间共享资源,所以线程间通信相对容易,通过共享变量等方式即可实现。
- 例如,在一个进程中创建多个线程来处理网络请求,这些线程可以共享进程的网络连接池等资源,不需要每个线程单独维护一份。
- 多进程:
- 每个进程都有自己独立的地址空间,包括代码段、数据段、堆、栈等。这意味着进程之间资源不共享,资源占用相对较大。进程间通信相对复杂,需要使用特定的IPC(Inter - Process Communication)机制,如管道、消息队列、共享内存等。
- 比如,同时运行多个独立的图像处理程序,每个程序作为一个进程,它们有自己独立的内存空间来存储图像数据等,互不干扰。
实际代码观察差异
- 多线程示例:
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
创建进程,每个进程有自己独立的资源。观察系统资源监视器,会看到每个进程有独立的资源占用情况,随着进程数增加,整体资源占用增长明显,因为每个进程都有自己独立的地址空间等资源。