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 --~--~---------~--~----~------------~-------~--~----~ 您收到此信息是由于您订阅了 Google 论坛“PerlChina 论坛”论坛。 要在此论坛发帖,请发电子邮件到 [email protected] 要退订此论坛,请发邮件至 [email protected] 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛 -~----------~----~----~----~------~----~------~--~---
