gpt4 book ai didi

python - 线程或多处理如何与递归一起工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:33 28 4
gpt4 key购买 nike

背景

我对开发有点陌生,有一个一般的 python/编程问题。如果您有一个递归方法,那么启用多线程或多处理涉及什么?我读了一些简单的书和几个例子,但他们似乎正在为新代码应用语法(而不是非常 cpu 密集型任务),我更想知道如何重新设计现有代码来做到这一点?

假设我有一些 cpu 密集型的东西(基本上不断增加自身直到达到限制):

def adderExample(sum, number):
if sum > 1000:
print 'sum is larger than 10. Stoping'
else:
sum = sum + number
print sum
number = number + 1
adderExample(sum, number)


adderExample(0,0)

问题/思考过程

假设我有多个可用内核,我将如何处理它以使其运行得更快(我希望它最终希望它跨越机器,但我认为这是 hadoop 的一个单独问题,所以我将这个例子只保留一个系统多个 CPU)?线程化似乎不是最佳选择(因为产生新线程需要时间),如果那是真的,我应该只关注多处理吗?如果是这样,是否可以将递归拆分到不同的 cpu(我假设是 vai 队列,然后在完成后重新加入)?我可以为每个进程创建多个线程而不是将这些进程拆分到多个 cpu 上吗?最后,递归深度限制是总体限制还是基于线程/进程,如果是这样,多处理/线程是否可以绕过它?

另一个问题(相关)那些试图通过暴力破解代码(rsa、无线 key 等)的人如何克服这个问题?我假设他们正在以某种方式在多个 cpu 上扩展他们的数学过程。这个或任何可以加深我理解的例子都很棒。

任何提示/建议都会很棒

谢谢!

最佳答案

这样的循环不会从线程中获益太多。假设您正在进行一系列加法运算,其中间值取决于之前的迭代。这不能并行化,因为线程会踩踏彼此的值(value)并覆盖事物。您可以锁定数据,这样一次只有一个线程处理它,但是这样您就失去了让多个线程处理该数据的任何好处。

当线程拥有独立的数据集时,线程工作得最好。例如图形渲染器就是一个很好的例子。每个线程渲染较大图像的一个子集 - 它们可能共享纹理/顶点/颜色/等数据的公共(public)数据源......但是每个线程都有自己的整个图像的一小部分来工作,并且不接触图像的其他区域。无论线程 #1 在它的一小部分像素上做什么,都不会影响线程 #2 在图像中其他地方所做的事情。

对于您的相关问题,密码破解是线程/多处理有意义的另一个例子。每个线程都会根据一个常见的“待破解”列表自行测试多个可能的密码。一个线程正在做的事情不会影响任何其他 cracker 线程,除非你得到一个匹配,这可能意味着所有线程都中止,因为工作“完成”。

一旦线程变得相互依赖,您就会失去拥有多个线程的许多好处。与花在实际工作上的时间相比,他们会花更多的时间等待对方完成。当然,这并不是说你不应该使用线程。有时拥有多个线程确实有意义,即使它们是相互依赖的。例如。图形线程 + 音效线程 + Action 处理器线程 + A.I.计算线程等...在游戏中。每一个名义上都是相互依赖的,但是当声音线程忙于为玩家刚刚射击的枪生成砰砰声+跳弹音频时,人工智能。线程正在计算游戏中的生物在做什么,图形线程正在背景中绘制一些云等等...

关于python - 线程或多处理如何与递归一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535178/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com