如何让多进程调用同一个函数运行更快?

作者站长头像
站长
· 阅读数 7

同时运行4个进程,这4个进程会调用同一个作用域在全局的函数(4个进程的代码片段有相同部分,有不同部分),这4个进程的运行速度是否会因此受到影响?我是否需要先深拷贝这个全局函数4份,然后每个进程,传递一个同样函数的深拷贝(伪装成4个函数),这样做,整体的程序,运行会更快吧?这样可以避免万一发生4个进程同时调用一个函数,起冲突?

下面有这样的伪代码表示我的基本意思:

def global_fun():
     do something
 
def p1_fun():
    for item in range(0,10000):
         global_fun()
     do something in p1

def p2_fun():
   for item in range(0,10000):
        global_fun()
    do something in p2
 
def p3_fun():
   for item in range(0,10000):
        global_fun()
    do something in p3
 
def p4_fun():
   for item in range(0,10000):
        global_fun()
    do something in p4
 
pool.apply_async(p1_fun)
pool.apply_async(p2_fun)
pool.apply_async(p3_fun)
pool.apply_async(p4_fun)

global_fun()​在四个进程中,会被调用很多次,需要深拷贝这个函数四次后,分别传入到apply_async中去吗?

回复
1个回答
avatar
test
2024-07-01

并没有性能提升,你这样做反而会增加一个程序的内存占用,按照现有的计算机程序组织逻辑来说,程序的代码会放在一个可读可执行的内存段中,所以保存多份只读的数据是毫无意义的应为他们没有被重写的风险,这也是immutable带来的好处往往只用保存数据的一份副本即可,所以再对于fork出来的多个进程而言他们他们的代码区域的虚拟内存空间往往会被映射到同一份物理内存,你复制四份同样的代码反而让程序代码大小增大的四倍,需要载入四份同样的代码到内存中

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容