【发布时间】:2011-11-24 00:16:56
【问题描述】:
背景
我对开发有点陌生,并且有一个一般的 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(我假设的队列,然后在完成后重新加入)?我可以为每个进程创建多个线程而不是将这些进程拆分到多个 cpu 上吗?最后,递归深度是否限制了总体限制,还是基于线程/进程,如果是,多处理/线程是否可以绕过它?
另一个问题(相关)那些试图通过蛮力编码(rsa、无线密钥等)的人如何克服这个问题?我假设他们正在以某种方式在多个 cpu 上扩展他们的数学过程。这个或任何建立我理解的例子都会很棒。
任何提示/建议都会很棒
谢谢!
【问题讨论】:
-
一般来说,进程比线程需要更多的时间和开销。线程使用与启动程序相同的内存空间。进程必须创建新的内存开销。使用线程,您还可以轻松地合并信息结构的共享而无需复制它们,如果不使用基于操作系统(或其他)的“共享内存”IPC 实现,就无法通过多个进程轻松地做到这一点。
标签: python multithreading algorithm scalability multiprocessing