From: Jason Roelofs Date: 2007-07-07T04:02:33+09:00 Subject: Re: ruby real time web server multi threaded probs ------=_Part_175538_23347592.1183748550231 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Arg, Francis is just too fast for me. I would also highly recommend EventMachine instead of doing your own socket code (it's Francis' library :P). Also, it seems like you are expecting Ruby threads to be system threads. This is simply not the case. Ruby threads are what's called Green threads, or handled by the Ruby interpreter only. The OS only ever sees one thread, the Ruby process. If you have ~100 Ruby threads going, you are probably running out of processing power to handle the constant switching. So scale yourself back, if really want to write your own socket code. Otherwise go get EventMachine and let it do all the nasty work for you. Jason On 7/6/07, Roger Pack wrote: > > So...I seem to have run into a few problems in a ruby multi-threaded > socket based program that, after quite awhile, I am still scratching my > head at these. Has any body encountered/overcome...[sorry if these are > old, or not real bugs] > > 1) Exceptions that are 'jump their bounds' Sometimes a 'normal' > exception, typically caught, will just bypass its begin rescue blocks! > Brings the whole system to a crash. > > 2) Crossed streams. You open up a socket and start receiving data meant > for another socket. > Related to that sometimes when doing "server.accept" when under duress > it throws exception like 'not a socket' or 'bad file descriptor' or > 'argument invalid' when it is a GOOD file descriptor, and is a socket. > Weirder than weird. > Also, I've had the following happen: > r,e,w = select([socket],nil,nil,5) # succeeds > then r is set to something other than [socket]! [very rare--once or > twice has that ever happened, but it has!] > or > r is set to [socket], then you when you run "socket.recv" it comes back > with "" -- in other words I think it read from some other socket that > was closed. > > 2) An app just freezes(at least on win32). Sometimes (too many open > sockets?) Ruby will just freeze. There it is. 0% cpu use. ~100 threads > exist. Ruby is frozen [1.8.6] > Or, related, a read from a socket 'freezes' all threads in the whole > program, waiting for a "recv" it come back [and if it doesn't....) > [pretty rare but happened once]. > > > Thus far the 'answer' to these problems has been to...not run a multi > threaded app. Mongrel runs several different apps, for example. Any > ideas or experiences like this? > If nobody recognizes these then I will try to recreate them and submit > them as bugs. This is nuts. > Thanks! > -Roger > > -- > Posted via http://www.ruby-forum.com/. > > ------=_Part_175538_23347592.1183748550231--