# How to control thread number

**URL:** <https://www.ruby-forum.com/t/how-to-control-thread-number/148602>\
**Category:** Ruby\
**Created:** [September 15, 2008, 3:10pm UTC](https://www.ruby-forum.com/t/how-to-control-thread-number/148602 "2008-09-15T15:10:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 15, 2008, 3:10pm UTC](https://www.ruby-forum.com/t/how-to-control-thread-number/148602/1 "2008-09-15T15:10:01Z")

</div>

Hi all,

I copy the following script from Ruby programming language(bundling  
with Ruby). If the size for pages (array size) is small,thread works  
very well. If the array size is big (such 2000) the thread doesn’t work  
at or very slow. I wonder what is the best means to control thread  
number based on this script, read a small trunk of array at a time using  
each\_slice method?

Thanks,

Li

##################### script#####################  
pages = %w( [www.rubycentral.com](http://www.rubycentral.com)  
[www.awl.com](http://www.awl.com)  
[www.pragmaticprogrammer.com](http://www.pragmaticprogrammer.com)  
)

threads = []

for page in pages  
threads \<\< Thread.new(page) { |myPage|

```
h = Net::HTTP.new(myPage, 80)
puts "Fetching: #{myPage}"
resp, data = h.get('/', nil )
puts "Got #{myPage}: #{resp.message}"

```

}  
end

---

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 15, 2008, 5:05pm UTC](https://www.ruby-forum.com/t/how-to-control-thread-number/148602/2 "2008-09-15T17:05:24Z")

</div>

On Sep 15, 2008, at 7:02 AM, Li Chen wrote:

> ## threads = []
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

this is exactly what threadify does

cfp:~ \> cat a.rb  
require ‘open-uri’

require ‘rubygems’  
require ‘threadify’

# gem install threadify

# 

# [http://codeforpeople.com/lib/ruby/threadify/threadify-0.0.3/README](http://codeforpeople.com/lib/ruby/threadify/threadify-0.0.3/README)

uris =  
%w(  
[http://www.ruby-lang.com](http://www.ruby-lang.com)  
[http://www.awl.com](http://www.awl.com)  
[http://www.pragmaticprogrammer.com](http://www.pragmaticprogrammer.com)  
)

uris.threadify(2) do |uri|  
tid = Thread.current.object\_id  
response = open(uri){|fd| fd.read}  
puts “#{ tid } : #{ uri } =\> #{ response[0,42].inspect }”  
end

cfp:~ \> ruby a.rb  
1867720 : [http://www.ruby-lang.com](http://www.ruby-lang.com) =\> “\n\nRuby  
Land\n\<me”  
1864060 : [http://www.awl.com](http://www.awl.com) =\> " “\<!DOCTYPE html PUBLIC  
"-//W3C//DTD XHTML 1”

this implementation is very short, you can read it so see one  
technique - which uses sized queues with a fixed number of producers  
and consumers

[http://codeforpeople.com/lib/ruby/threadify/threadify-0.0.3/lib/threadify.rb](http://codeforpeople.com/lib/ruby/threadify/threadify-0.0.3/lib/threadify.rb)

cheers.

a @ [http://codeforpeople.com/](http://codeforpeople.com/)

---

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 15, 2008, 6:40pm UTC](https://www.ruby-forum.com/t/how-to-control-thread-number/148602/3 "2008-09-15T18:40:57Z")

</div>

That’s exactly what ThreadLimiter is designed for:

[http://www.erikveen.dds.nl/threadlimiter/doc/index.html](http://www.erikveen.dds.nl/threadlimiter/doc/index.html)

gegroet,  
Erik V.

---

<div class="post-metadata">

**Author:** ![alex-osu3](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/13edae/32.png) [@alex-osu3](https://www.ruby-forum.com/u/alex-osu3)\
**Post date:** [September 15, 2008, 5:56pm UTC](https://www.ruby-forum.com/t/how-to-control-thread-number/148602/4 "2008-09-15T17:56:14Z")

</div>

are you calling join on the threads?
