<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Equars People  - Ruby Fiber Ring Benchmark Changes</title>
  <id>tag:users.equars.com,2008:/2008/5/22/ruby-fiber-ring-benchmark/changes</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  <link href="http://users.equars.com/2008/5/22/ruby-fiber-ring-benchmark/changes.xml" rel="self" type="application/atom+xml"/>
  <link href="/2008/5/22/ruby-fiber-ring-benchmark" rel="alternate" type="text/html"/>
  <updated>2008-05-22T15:45:42Z</updated>
  <entry xml:base="http://users.equars.com/">
    <author>
      <name>marco</name>
    </author>
    <id>tag:users.equars.com,2008-05-22:188:2</id>
    <updated>2008-05-22T15:45:42Z</updated>
    <link href="http://users.equars.com/2008/10/6/ruby-fiber-ring-benchmark" rel="alternate" type="text/html"/>
    <title>Ruby Fiber Ring Benchmark</title>
<content type="html">&lt;p&gt;I stole an exercise from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Erlang_%28programming_language%29&quot;&gt;Erlang&lt;/a&gt; world: the &lt;a href=&quot;http://people.equars.com/2008/5/22/erlang-ring-benchmark&quot;&gt;ring benchmark&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I used the exercise as a way to get acquainted with a new class in Ruby starting from the version1.9: &lt;a href=&quot;http://en.wikipedia.org/wiki/Fiber_(computer_science&quot;&gt;Fiber&lt;/a&gt;), a way to implement asymmetric &lt;a href=&quot;http://en.wikipedia.org/wiki/Coroutine&quot;&gt;coroutines&lt;/a&gt; in Ruby&lt;/p&gt;

&lt;table class=&quot;CodeRay&quot;&gt;&lt;tr&gt;
  &lt;td title=&quot;click to toggle&quot; class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;15&lt;tt&gt;
&lt;/tt&gt;16&lt;tt&gt;
&lt;/tt&gt;17&lt;tt&gt;
&lt;/tt&gt;18&lt;tt&gt;
&lt;/tt&gt;19&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;20&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;21&lt;tt&gt;
&lt;/tt&gt;22&lt;tt&gt;
&lt;/tt&gt;23&lt;tt&gt;
&lt;/tt&gt;24&lt;tt&gt;
&lt;/tt&gt;25&lt;tt&gt;
&lt;/tt&gt;26&lt;tt&gt;
&lt;/tt&gt;27&lt;tt&gt;
&lt;/tt&gt;28&lt;tt&gt;
&lt;/tt&gt;29&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;30&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;31&lt;tt&gt;
&lt;/tt&gt;32&lt;tt&gt;
&lt;/tt&gt;33&lt;tt&gt;
&lt;/tt&gt;34&lt;tt&gt;
&lt;/tt&gt;35&lt;tt&gt;
&lt;/tt&gt;36&lt;tt&gt;
&lt;/tt&gt;37&lt;tt&gt;
&lt;/tt&gt;38&lt;tt&gt;
&lt;/tt&gt;39&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;40&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;41&lt;tt&gt;
&lt;/tt&gt;42&lt;tt&gt;
&lt;/tt&gt;43&lt;tt&gt;
&lt;/tt&gt;44&lt;tt&gt;
&lt;/tt&gt;45&lt;tt&gt;
&lt;/tt&gt;46&lt;tt&gt;
&lt;/tt&gt;47&lt;tt&gt;
&lt;/tt&gt;48&lt;tt&gt;
&lt;/tt&gt;49&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;50&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;51&lt;tt&gt;
&lt;/tt&gt;52&lt;tt&gt;
&lt;/tt&gt;53&lt;tt&gt;
&lt;/tt&gt;54&lt;tt&gt;
&lt;/tt&gt;55&lt;tt&gt;
&lt;/tt&gt;56&lt;tt&gt;
&lt;/tt&gt;57&lt;tt&gt;
&lt;/tt&gt;58&lt;tt&gt;
&lt;/tt&gt;59&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;60&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;61&lt;tt&gt;
&lt;/tt&gt;62&lt;tt&gt;
&lt;/tt&gt;63&lt;tt&gt;
&lt;/tt&gt;64&lt;tt&gt;
&lt;/tt&gt;65&lt;tt&gt;
&lt;/tt&gt;66&lt;tt&gt;
&lt;/tt&gt;67&lt;tt&gt;
&lt;/tt&gt;68&lt;tt&gt;
&lt;/tt&gt;69&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;70&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;71&lt;tt&gt;
&lt;/tt&gt;72&lt;tt&gt;
&lt;/tt&gt;73&lt;tt&gt;
&lt;/tt&gt;74&lt;tt&gt;
&lt;/tt&gt;75&lt;tt&gt;
&lt;/tt&gt;76&lt;tt&gt;
&lt;/tt&gt;77&lt;tt&gt;
&lt;/tt&gt;78&lt;tt&gt;
&lt;/tt&gt;79&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;80&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;81&lt;tt&gt;
&lt;/tt&gt;82&lt;tt&gt;
&lt;/tt&gt;83&lt;tt&gt;
&lt;/tt&gt;84&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;#!/usr/bin/ruby1.9&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fiber&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;benchmark&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;Ring&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   attr_reader &lt;span class=&quot;sy&quot;&gt;:id&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   attr_accessor &lt;span class=&quot;sy&quot;&gt;:attach&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;initialize&lt;/span&gt;(id)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;iv&quot;&gt;@id&lt;/span&gt; = id&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;iv&quot;&gt;@fiber&lt;/span&gt; = &lt;span class=&quot;co&quot;&gt;Fiber&lt;/span&gt;.new &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;         pass_message&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;|&lt;/span&gt;(other)&lt;tt&gt;
&lt;/tt&gt;      other.attach = &lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; !other.nil?&lt;tt&gt;
&lt;/tt&gt;      other&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;resume&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;iv&quot;&gt;@fiber&lt;/span&gt;.resume&lt;tt&gt;
&lt;/tt&gt;    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;pass_message&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;while&lt;/span&gt; message = message_in&lt;tt&gt;
&lt;/tt&gt;         message_out(message)      &lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;message_in&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;iv&quot;&gt;@attach&lt;/span&gt;.resume &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; !&lt;span class=&quot;iv&quot;&gt;@attach&lt;/span&gt;.nil?&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;message_out&lt;/span&gt;(message)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;co&quot;&gt;Fiber&lt;/span&gt;.yield(message)&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;RingStart&lt;/span&gt; &amp;lt; &lt;span class=&quot;co&quot;&gt;Ring&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   attr_accessor &lt;span class=&quot;sy&quot;&gt;:message&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;initialize&lt;/span&gt;(n, m, message)&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;iv&quot;&gt;@m&lt;/span&gt; = m&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;iv&quot;&gt;@message&lt;/span&gt; = message&lt;tt&gt;
&lt;/tt&gt;      &lt;span class=&quot;r&quot;&gt;super&lt;/span&gt;(n)&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;pass_message&lt;/span&gt; &lt;tt&gt;
&lt;/tt&gt;      loop { message_out(&lt;span class=&quot;iv&quot;&gt;@message&lt;/span&gt;) }&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;create_chain_r&lt;/span&gt;(i, chain)&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;c&quot;&gt;# recursive version&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt; chain &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; i&amp;lt;=&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   r = chain.nil? ? &lt;span class=&quot;co&quot;&gt;Ring&lt;/span&gt;.new(i) :  chain | &lt;span class=&quot;co&quot;&gt;Ring&lt;/span&gt;.new(i)&lt;tt&gt;
&lt;/tt&gt;   create_chain(i&lt;span class=&quot;i&quot;&gt;-1&lt;/span&gt;, r)&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;create_chain&lt;/span&gt;(n, chain)&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;c&quot;&gt;# loop version&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   &lt;span class=&quot;c&quot;&gt;# needed to avoid stack overflow for high n&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;   n.downto(&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;) {&lt;tt&gt;
&lt;/tt&gt;      chain = chain | &lt;span class=&quot;co&quot;&gt;Ring&lt;/span&gt;.new(n)&lt;tt&gt;
&lt;/tt&gt;   }&lt;tt&gt;
&lt;/tt&gt;   chain&lt;tt&gt;
&lt;/tt&gt;&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;n=&lt;span class=&quot;pc&quot;&gt;ARGV&lt;/span&gt;[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;].to_i&lt;tt&gt;
&lt;/tt&gt;m=&lt;span class=&quot;pc&quot;&gt;ARGV&lt;/span&gt;[&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;].to_i&lt;tt&gt;
&lt;/tt&gt;mess=&lt;span class=&quot;sy&quot;&gt;:hello&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;tm  = &lt;span class=&quot;co&quot;&gt;Benchmark&lt;/span&gt;.measure {&lt;tt&gt;
&lt;/tt&gt;   ringu = &lt;span class=&quot;co&quot;&gt;RingStart&lt;/span&gt;.new(&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;, m, mess)&lt;tt&gt;
&lt;/tt&gt;   chain = create_chain(n, ringu)&lt;tt&gt;
&lt;/tt&gt;   m.times { ringu.message = chain.resume }&lt;tt&gt;
&lt;/tt&gt;}.format(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;%10.6r&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).gsub!(&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\)&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;n&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;m&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;dl&quot;&gt;#{&lt;/span&gt;tm&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


The comparison with the 
[Erlang](http://en.wikipedia.org/wiki/Erlang_%28programming_language%29) 
is of course unfair, for one of the Erlang specialty is the spawning of cooperative processes. Anyway, here are the results:

&lt;table width=&quot;50%&quot;&gt;
&lt;tr&gt;
    &lt;th&gt;N&lt;/th&gt;
    ﻿&lt;th&gt;M&lt;/th&gt;
﻿    &lt;th&gt;Execution Time&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
﻿    &lt;th&gt;Ruby [ms]&lt;/th&gt;
    ﻿&lt;th&gt;Erlang [ms]&lt;/th&gt;
&lt;/tr&gt;                                
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 10&lt;/td&gt;
&lt;td&gt; 1&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 20&lt;/td&gt;
&lt;td&gt; 2&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 50&lt;/td&gt;
&lt;td&gt; 4&lt;/td&gt;
&lt;td&gt;10
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 100&lt;/td&gt;
&lt;td&gt; 10&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 200&lt;/td&gt;
&lt;td&gt; 18&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 500&lt;/td&gt;
&lt;td&gt; 42&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt; 1000&lt;/td&gt;
&lt;td&gt; 82&lt;/td&gt;
&lt;td&gt;10
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 10&lt;/td&gt;
&lt;td&gt; 15&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 20&lt;/td&gt;
&lt;td&gt; 23&lt;/td&gt;
&lt;td&gt;10
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 50&lt;/td&gt;
&lt;td&gt; 60&lt;/td&gt;
&lt;td&gt;0
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 100&lt;/td&gt;
&lt;td&gt; 99&lt;/td&gt;
&lt;td&gt;10
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 200&lt;/td&gt;
&lt;td&gt; 186&lt;/td&gt;
&lt;td&gt;20
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 500&lt;/td&gt;
&lt;td&gt; 433&lt;/td&gt;
&lt;td&gt;50
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt; 1000&lt;/td&gt;
&lt;td&gt; 805&lt;/td&gt;
&lt;td&gt;90
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 10&lt;/td&gt;
&lt;td&gt; 320&lt;/td&gt;
&lt;td&gt;10
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 20&lt;/td&gt;
&lt;td&gt; 423&lt;/td&gt;
&lt;td&gt;20
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 50&lt;/td&gt;
&lt;td&gt; 809&lt;/td&gt;
&lt;td&gt;60
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 100&lt;/td&gt;
&lt;td&gt; 1479&lt;/td&gt;
&lt;td&gt;130
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 200&lt;/td&gt;
&lt;td&gt; 2803&lt;/td&gt;
&lt;td&gt;250
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 500&lt;/td&gt;
&lt;td&gt; 6914&lt;/td&gt;
&lt;td&gt;600
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt; 1000&lt;/td&gt;
&lt;td&gt; 15410&lt;/td&gt;
&lt;td&gt;1190
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 10&lt;/td&gt;
&lt;td&gt; 16168&lt;/td&gt;
&lt;td&gt;190
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 20&lt;/td&gt;
&lt;td&gt; 17491&lt;/td&gt;
&lt;td&gt;320
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 50&lt;/td&gt;
&lt;td&gt; 21348&lt;/td&gt;
&lt;td&gt;710
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 100&lt;/td&gt;
&lt;td&gt; 28314&lt;/td&gt;
&lt;td&gt;1480
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 200&lt;/td&gt;
&lt;td&gt; 41547&lt;/td&gt;
&lt;td&gt;2860
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 500&lt;/td&gt;
&lt;td&gt; 81166&lt;/td&gt;
&lt;td&gt;7200
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10000&lt;/td&gt;
&lt;td&gt; 1000&lt;/td&gt;
&lt;td&gt; 147570&lt;/td&gt;
&lt;td&gt;14190
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</content>  </entry>
  <entry xml:base="http://users.equars.com/">
    <author>
      <name>marco</name>
    </author>
    <id>tag:users.equars.com,2008-05-22:177:1</id>
    <updated>2008-05-22T15:06:40Z</updated>
    <link href="http://users.equars.com/2008/10/6/ruby-fiber-ring-benchmark" rel="alternate" type="text/html"/>
    <title>Ruby Fiber Ring Benchmark</title>
<content type="html">&lt;p&gt;I stole an exercise from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Erlang_%28programming_language%29&quot;&gt;Erlang&lt;/a&gt; world: the [ring benchmark]()&lt;/p&gt;</content>  </entry>
</feed>
