From: "David A. Black" Date: 2008-02-20T05:01:13+09:00 Subject: Hi -- I'm trying to get a fix on thread behavior in 1.9 vs. 1.8.6, and the following things seem odd to me (unless I've just slept through some known changes, which is always possible). Doing this: $ ruby19 -ve 'Thread.new { puts "a" }' ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0] always results in no output (except the version). The same thing in 1.8.6 always puts's "a": $ ruby -ve 'Thread.new { puts "a" }' ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.1] a So I figure that somehow the killing of the new thread upon exit is "winning" over the execution of the thread. I guess that's OK (?). Anyway, this tends to support that interpretation: $ ruby19 -e 'Thread.new { puts "a" }; sleep 0.01' a I then did a few more little tests. I'm leaving in all the -v stuff, since that's how it was, but the main point is that 1.8.6 seems to always do this: $ ruby -ve 'Thread.new { puts "a" }; puts "b"' ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.10.1] a b while 1.9 does a variety of things, presumably depending on scheduling: $ ruby19 -ve 'Thread.new { puts "a" }; puts "b"' ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0] ba $ ruby19 -ve 'Thread.new { puts "a" }; puts "b"' ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0] b $ ruby19 -ve 'Thread.new { puts "a" }; puts "b"' ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0] ba $ ruby19 -ve 'Thread.new { puts "a" }; puts "b"' ruby 1.9.0 (2008-02-15 revision 0) [i686-darwin9.1.0] ba $ (That last one had both letters but only one newline.) I'm not quite sure what all of this adds up to, in terms of predicting thread behavior at or near the end of a program. That one can't? :-) David -- Upcoming Rails training from David A. Black and Ruby Power and Light: ADVANCING WITH RAILS, April 14-17 2008, New York City CORE RAILS, June 24-27 2008, London (Skills Matter) See http://www.rubypal.com for details, and stay tuned for dates in Berlin!