多线程需要编译器的强大支持 比如:对于某个处理流程A 编译器能将其断成4截,然后在4个不同的核上跑 然而: 能对流程进行 分段的编译器, 很少。。。。。
于 2009-1-14 23:04, 空格 写道: > 多谢楼上几位的回复。 > 我想做的事是这样的:我的程序要独立进行四次调用外部程序的计算。就是BLAST,做生物信息的会知道,全基因组的BLAST会很花时间。目前的程序是 > 只能在一个CPU上依次跑完这四个blast程序。所以我想把原来的程序改进成能同时进行这四个BLAST。这样可以大大节省计算时间。也许开多线程是 > 比较合适的方法。。。 > 谢谢诸位。我再去看看讲多线程的东西吧。呵呵。 > > On 1月14日, 下午5时50分, cool J <[email protected]> wrote: > >> 多核利用就程序方面而言,最简单的就是开多线程。但也不可能达到完全的均衡,因为程序在cpu core之间的移动也是要开销的,例如linux >> kernel就允许有25%的差别,在这个差别之内即使不均衡,系统也不会有任何的动作。 >> >> 2009/1/14 agentzh <[email protected]> >> >> >> >> >>> 2009/1/14 空格 <[email protected]> >>> >>>> 如何让程序能利用多个节点的计算能力,或者如何在双核机器上使程序能利用两个核的计算能力? >>>> >>> 让单计算使用 SMP(Symmetric >>> multiprocessing<http://en.wikipedia.org/wiki/Symmetric_multiprocessing>),多是使用多线程或者多进程了。而且多线程还须是多 >>> OS 线程,而非多 IO 线程(或者说"纤程")。不过我们经常看到让一个程序同时用满多个核相对比较容易,而让用满 2 个核时比只用满 1 >>> 个核还要快一些却是比较困难的(需要程序员做非常多的工作,同时也需要计算本身是适于并行的)。更多地,我们会看到,在同一台双核的机器上,同一个程序,用满 2 >>> 个核反而比单用 1 个核(使用纤程或者不使用纤程)的方式要慢。 >>> >>> Haskell 程序员们一直对 SMP 编程和多线程非常执着,呵呵,毕竟在这种纯净的副作用高度可控的函数式语言中,作并行是相对容易的。GHC >>> 的老大说没有特别的理由,就不因使用 forkOS (与 forkIO 相对)。因为前者几乎总是比后者跑得更慢。OS 线程的切换开销是相当高的。 >>> >>> 所以大家流行的做法是多进程同时对不同的任务作彼此相对独立的计算。对于并发要求高的场合,比如 web server,则采取多进程 + >>> 多纤程。Erlang 就是纤程王子了,memcached 也是了,lighttpd 也算一个,呵呵。 >>> >>> 我个人并不是这个领域的专家,多是道听途说,班门弄斧了,见笑 ;) >>> >>> -agentzh >>> >> -- >> <<END >> 有人教我们怎么做题,有人教我们怎么画画,有人教我们怎么工作,但是,没有人曾经告诉我们怎么去思考,更没有人告诉我们怎么去获得自由。 >> END >> > > > --~--~---------~--~----~------------~-------~--~----~ 您收到此信息是由于您订阅了 Google 论坛“PerlChina 论坛”论坛。 要在此论坛发帖,请发电子邮件到 [email protected] 要退订此论坛,请发邮件至 [email protected] 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛 -~----------~----~----~----~------~----~------~--~---
