¤â¤·¤¯¤Ï»ä¤ÎƬ¤ÎÃæ¤Î°ìÉô

³µÍ×

  • Erlang¤ò»Ï¤á¤¿¤Î¤Ï¡¢N times faster on an N core processor¤È¤¤¤¦¸ÀÍդ˼椫¤ì¤¿¤«¤é
  • ËÜÅö¤Ë¤½¤¦¤Ê¤Î¤«»î¤·¤Æ¤ß¤¿¡£
  • 2¥³¥¢¤Ç»î¤·¤¿¤È¤³¤í¡¢ÂçÂΤ½¤ó¤Ê·ë²Ì¤Ë¤Ê¤Ã¤¿¡£

¥×¥í¥°¥é¥à

½Å¤¤´Ø¿ô
  • »þ´Ö¤òÂ䶤¹¤ë¤¿¤á¡¢½Å¤¤´Ø¿ô¤òÍÑ°Õ
  • ñ½ã¤Ê¥Õ¥£¥Ü¥Ê¥Ã¥Á¤Ë¤¹¤ë¡£
fib(1) -> 1;
fib(2) -> 1;
fib(N) ->
  fib(N-2) + fib(N-1).
Ã༡½èÍýÈÇ
start2(A,B) ->
   io:format("start : ~p~n",[now()]),
   io:format("~p~n",[fib(A)]),
   io:format("~p~n",[fib(B)]),
   io:format("end : ~p~n",[now()]).
ʹԽèÍýÈÇ
fiba() ->
   receive
    {N, Pid} ->
      A = fib(N),
      Pid ! {self(), A}
   end.

start(A,B) ->
   io:format("start : ~p~n",[now()]),

   P1 = spawn(?MODULE, fiba, []),
   P2 = spawn(?MODULE, fiba, []),
   P10 = spawn(?MODULE, waitres, [P1]),
   P20 = spawn(?MODULE, waitres, [P2]),
   P1 ! {A, P10},
   P2 ! {B, P20},
   ok.

waitres(Pid) ->
   receive
     {Pid, N} ->
       io:format("waitres: ~p ~p ~p~n",[now(), Pid, N])
   end.

·ë²Ì

  • ¼ê¸µ¤ÎPC(Athlon X2)¤Çfib(40)¤ò2¤Ä(start2(40,40), start(40,40))¹Ô¤Ã¤¿¤È¤³¤í¡¢
    • Ã༡½èÍýÈÇ¡¦¡¦¡¦Ìó47ÉÃ
    • ʹԽèÍýÈÇ¡¦¡¦¡¦Ìó25ÉÃ
  • ÂçÂÎȾʬ¤Ë¤Ê¤Ã¤¿¡£
  • ¥·¥¹¥Æ¥à¥â¥Ë¥¿¤Ç¤ß¤Æ¤¤¤ë¤È¡¢
    • Ã༡½èÍýÈǤǤϡ¢1¤Ä¤Î¥³¥¢¤Î¤ß100%¤Ë¤Ê¤ë¤Î¤ËÂФ·¡¢
    • ʹԽèÍýÈǤǤϡ¢2¤Ä¤Î¥³¥¢Î¾Êý¤¬100%¤È¤Ê¤ê¡¢
  • ʹԽèÍý¤Î²¸·Ã¤¬´¶¤¸¤é¤ì¤¿¡£
  • N times faster on an N core processor
    ¤È¤¤¤¦¤Î¤â¤¢¤Ê¤¬¤Á¤¦¤½¤Ç¤Ï¤Ê¤¤¡£
  • ¤¿¤À¤·¡¢¤³¤ì¤ÏʹԽèÍý¤Ç¤­¤ë¤â¤Î¤¬¥³¥¢¤Î¿ô¤À¤±¤¢¤ë¤È¤­¤¬
    ºÇ¤â¸úΨ¤¬¤è¤¯¤Ê¤ë¤³¤È¤Ëα°Õ
    • fib¤ò1¸Ä¤À¤±¹Ô¤¦¤È¤­¤Ï¡¢¥³¥¢¤¬Áý¤¨¤Æ¤â¸ú²Ì¤Ï¤Ê¤¤¡£

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu

¥á¥Ë¥å¡¼¥µ¥ó¥×¥ë2

³«¤¯¥á¥Ë¥å¡¼

ÊĤ¸¤ë¥á¥Ë¥å¡¼

  • ¥¢¥¤¥Æ¥à
  • ¥¢¥¤¥Æ¥à
  • ¥¢¥¤¥Æ¥à
¡Ú¥á¥Ë¥å¡¼ÊÔ½¸¡Û

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹