Cd Cd wrote: > How come when I run this code, the following output goes line by line? > Fetching: www.google.com > Fetching: www.slashdot.org > Fetching: www.mit.edu > Got www.slashdot.org: Moved Permanently > Got www.google.com: OK > Got www.mit.edu: OK You could probably explain this as follows: Thread 1 goes for Google. Waiting for response is a blocking call, so it yields. Thread 2 goes for Slashdot. Waiting for response is a blocking call, so it yields. Thread 3 goes for MIT. Waiting for response is a blocking call, so it yields. From there the order largely depends on which response comes back first and which thread get scheduled next. Given that Ruby uses only Green threads that must generally reach an appropriate point to switch, this seems perfectly logical. I would also expect the result would remain mostly the same for those first three lines, and mostly random for the next three lines, as long as you run under Ruby 1.8. Other implementations that use all native threads will be largely unpredictable for any sequence. When I tested this code under JRuby, it produced a different sequence every time (and required joining on the threads so they'd run to completion). - Charlie