(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
All the threads are running in one process, hence there is only one pid.
···
On 05/11/2011 01:32 PM, Dan King wrote:
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
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.
···
On Wed, May 11, 2011 at 3:52 PM, 7stud -- <bbxx789_05ss@yahoo.com> wrote:
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 post also states that ruby threads all run in a single process,
the link is highly relevant.