我一直在尝试使用多处理模块来优化我的代码,但我认为我已经陷入了过早优化的陷阱。
例如,运行此代码时:
num = 1000000
l = mp.Manager().list()
for i in range(num):
l.append(i)
l_ = Counter(l)
这需要几倍的时间:
num = 1000000
l = []
for i in range(num):
l.append(i)
l_ = Counter(l)
多处理列表比常规列表慢的原因是什么?有没有办法让它们变得高效?
答案 0 :(得分:1)
Shared memroy data structures意味着在进程之间共享。要同步访问,需要锁定它们。另一方面,list
([]
)不需要锁定。
有/无锁定会有所作为。