<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: execution code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 05:32:11 GMT</pubDate>
    <description>DZone Snippets: execution code</description>
    <item>
      <title>Ruby Threading</title>
      <link>http://snippets.dzone.com/posts/show/5212</link>
      <description>Uses Ruby (version 1.8) threading to run code in parallel which reduces the time taken for the script to complete.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'ping' #from core classes&lt;br /&gt;@ip_prefix='192.168.1.'&lt;br /&gt;&lt;br /&gt;def ping_ip(i)&lt;br /&gt;  puts "Found #{@ip_prefix + i.to_s}" if Ping.pingecho(@ip_prefix+i.to_s,1)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;p50 = Thread.new{(1..50).each{|i| ping_ip(i) };puts 'p50-finished'}&lt;br /&gt;p100 = Thread.new{(51..100).each{|i| ping_ip(i) };puts 'p100-finished'}&lt;br /&gt;p150 = Thread.new{(101..150).each{|i| ping_ip(i) }; puts 'p150-finished'}&lt;br /&gt;p200 = Thread.new{(151..200).each{|i| ping_ip(i) }; puts 'p200-finished'}&lt;br /&gt;p254 = Thread.new{(201..254).each{|i| ping_ip(i) }; puts 'p254-finished'}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;output:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Found 192.168.1.2&lt;br /&gt;Found 192.168.1.3&lt;br /&gt;Found 192.168.1.8&lt;br /&gt;Found 192.168.1.9&lt;br /&gt;Found 192.168.1.10&lt;br /&gt;Found 192.168.1.11&lt;br /&gt;Found 192.168.1.12&lt;br /&gt;Found 192.168.1.13&lt;br /&gt;Found 192.168.1.15&lt;br /&gt;Found 192.168.1.110&lt;br /&gt;Found 192.168.1.21&lt;br /&gt;Found 192.168.1.22&lt;br /&gt;Found 192.168.1.140&lt;br /&gt;p50-finished&lt;br /&gt;p150-finished&lt;br /&gt;Found 192.168.1.200&lt;br /&gt;p200-finished&lt;br /&gt;p100-finished&lt;br /&gt;Found 192.168.1.254&lt;br /&gt;p254-finished&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This script took about 1 minute to complete, whereas the non-threaded script took around 4 minutes to complete.&lt;br /&gt;&lt;br /&gt;Reference: Ruby Threads: &lt;a href="http://rubylearning.com/satishtalim/ruby_threads.html"&gt;RUBY THREADS&lt;/a&gt; [rubylearning.com]&lt;br /&gt;&lt;br /&gt;*update 11:21pm*&lt;br /&gt;I tried the same experiment again this time with 26 threads (9 pings each on average) and the script finished in under 15 seconds.&lt;br /&gt;&lt;br /&gt;*update 11:39pm*&lt;br /&gt;A separate thread for each ping seems to work best, since it only took a couple of seconds to finish.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(1..254).each{|i| Thread.new {puts 'Found ' + ip_prefix + i.to_s if Ping.pingecho(ip_prefix+i.to_s,10)}}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Tue, 11 Mar 2008 23:00:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5212</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
  </channel>
</rss>
