I expected the script below to do the following:
(1) spawn a new thread
(2) connect to a server
(3) read the data transmitted by the server
(4) close the connection.
(5) repeat 1-4
While the script works, it does NOT spawn a new thread for each
connection. Does anyone why that is the case? Thanks.
require ‘socket’
threads = []
500.times do
threads << Thread.new do
socket = TCPSocket.open(‘127.0.0.1’, 23)
pid = Process.pid
while line = socket.gets
print “Client thread (#{pid})\t” + line.chomp + “\n”
end
socket.close
end
end
threads.each { |t| t.join }
On 05/11/2011 01:32 PM, Dan K. wrote:
end
socket.close
end
end
threads.each { |t| t.join }
All the threads are running in one process, hence there is only one pid.
Dan K. wrote in post #998095:
I expected the script below to do the following:
(1) spawn a new thread
(2) connect to a server
(3) read the data transmitted by the server
(4) close the connection.
(5) repeat 1-4
While the script works, it does NOT spawn a new thread for each
connection. Does anyone why that is the case? Thanks.
threads = []
10.times do |i|
threads << Thread.new(i) do |thread_num|
sleep(rand(3))
puts thread_num
end
end
threads.each { |t| t.join }
–output:–
1
2
3
6
5
4
9
0
7
8
Read the first paragraph here:
Christopher D. wrote in post #998130:
On Wed, May 11, 2011 at 3:52 PM, 7stud – [email protected]
wrote:
Read the first paragraph here:
http://rubylearning.com/satishtalim/ruby_threads.html
Of course, that paragraph is only correct for MRI 1.8.x and earlier,
and is irrelevant to the issue here, which was correctly addressed in
the first post in the thread,
Well…since that link explains that ruby threads all run in a single
process (as well as providing some other pertinent information), and the
first response also states that ruby threads all run in a single
process, the link is relevant and corroborates what the first response
stated.
On Wed, May 11, 2011 at 3:52 PM, 7stud – [email protected]
wrote:
Read the first paragraph here:
http://rubylearning.com/satishtalim/ruby_threads.html
Of course, that paragraph is only correct for MRI 1.8.x and earlier,
and is irrelevant to the issue here, which was correctly addressed in
the first post in the thread, and has nothing to do with any special
peculiarities of thread implementations in any of the various Ruby
implementations, but just with the fact that threads (even native
threads) aren’t the same thing as native processes.