使用multiprocessing并行线性搜索性能不升反降的原因咨询
多进程线性搜索比单进程更慢的原因
我尝试用Python的multiprocessing模块并行化线性搜索,创建两个进程后,运行耗时反而比单进程更长。测试代码如下:
import multiprocessing import math import numpy as np import os import time import random from time import sleep, time #from threading import Thread def linearsearch(arr,search_var): count=0 index_list=[] for i in range(len(arr)): if arr[i]==search_var: count+=1 index_list.append(i) def linearsearch_p1(arr,search_var): count=0 index_list=[] for i in range(0,round(len(arr)/2)): if arr[i]==search_var: count+=1 index_list.append(i) def linearsearch_p2(arr,search_var): count=0 index_list=[] for i in range(round(len(arr)/2),len(arr)): if arr[i]==search_var: count+=1 index_list.append(i) number_to_search=5 input_array=[random.randint(1,10) for i in range(10000)] array_len=len(input_array) start=time() linearsearch(input_array,number_to_search) finish=time() print(f'Time taken by Single Process Linear Search {finish-start: .2f} second(s) to finish') start_time = time() t1 = multiprocessing.Process(target=linearsearch_p1, args=(input_array,number_to_search)) t2 = multiprocessing.Process(target=linearsearch_p2, args=(input_array,number_to_search)) t1.start() t2.start() t1.join() t2.join() end_time = time() print(f'It took {end_time- start_time: 0.2f} second(s) to complete.')
运行输出:
Time taken by Single Process Linear Search 0.00 second(s) to finish.
It took 0.17 second(s) to complete.
多进程耗时远高于单进程的原因如下:
- 进程创建与数据拷贝开销:Python多进程创建时,会复制父进程的内存空间(包括
input_array),这个拷贝过程本身需要消耗时间。而你的线性搜索任务非常轻量,进程创建、启动的额外开销完全超过了并行搜索节省的时间。 - 任务粒度太小:10000个元素的线性搜索单进程执行快到计时显示0.00秒,说明任务耗时极短。并行化这种轻量任务,根本体现不出并行的优势,反而被额外开销拖慢。只有当任务足够繁重,并行处理节省的时间远大于进程开销时,多进程才有意义。
- 计时精度限制:单进程的0.00秒是
time()函数的精度问题导致的,实际耗时可能在0.001~0.005秒之间,但被四舍五入显示为0.00。而多进程的计时包含了从创建到结束的全部流程,所以真实时间差距虽没有显示的夸张,但多进程确实更慢。
内容的提问来源于stack exchange,提问作者Vivek Mehta
相关产品推荐
相关产品推荐

