[ruby19] Thread $B@ZBX$($,0[>o$KCY$$!)(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

e$BK;$7$/$F;C$/J|CV$7$F$$$F!$:#F|!$5W$7$V$j$KF0$+$7$F$_$?$N$G$9$,!$e(B
e$B:#$Ne(B 1.9 e$B$C$F!$e(BThread
e$B@ZBX$($,$b$N$9$4$/CY$/$J$C$F$$$?$j$7$^$9$+!)e(B

ruby 1.9.2dev (2009-09-19) [i686-linux] e$B$G;n$7$F$$$?$N$G$9$,!$e(B
e$B<!$N%9%/%j%W%He(B (1) e$B$G$"$l$P!$e(B1.8
e$B$HF1MM$K$9$0$K%&%#%s%I%&$,=P$^$9!%e(B
-----(1)-----------------------------------------------------
module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
require “tk”
TkButton.new(:text => ‘hello’,:command => proc{puts
“hello”}).pack(:fill=>‘x’)
TkButton.new(:text => ‘quit’,:command => proc{exit}).pack(:fill=>‘x’)
Tk.mainloop

e$B$G$9$,!$e(B
-----(2)-----------------------------------------------------
require “tk”
TkButton.new(:text => ‘hello’,:command => proc{puts
“hello”}).pack(:fill=>‘x’)
TkButton.new(:text => ‘quit’,:command => proc{exit}).pack(:fill=>‘x’)
Tk.mainloop

e$B$de(B
-----(3)-----------------------------------------------------
module TkCore; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
require “tk”
Thread.new{
TkButton.new(:text => ‘hello’,:command => proc{puts
“hello”}).pack(:fill=>‘x’)
TkButton.new(:text => ‘quit’,:command => proc{exit}).pack(:fill=>‘x’)
}
Tk.mainloop

e$B$G$O$H$s$G$b$J$/CY$/$J$C$F$7$^$$$^$9!%e(B

e$B$3$s$JC;$$$b$N$G$b:9$,J,$+$k$/$i$$$G$9$N$G!$e(B
e$B$b$C$HBg$-$J%9%/%j%W%H$G$OIC$HJ,$H$$$&%l%Y%k$G$N:9$K$J$C$F$$$^$9!%e(B

e$B860x$N?4Ev$?$j$d2sHr:v$J$I$"$j$^$7$?$i!$65$($F$$$?$@$1$^$9$H9,$$$G$9!%e(B

e$B$J$+$@$G$9!#e(B

At Sun, 20 Sep 2009 12:27:48 +0900,
Hidetoshi NAGAI wrote in [ruby-dev:39352]:

e$BK;$7$/$F;C$/J|CV$7$F$$$F!$:#F|!$5W$7$V$j$KF0$+$7$F$_$?$N$G$9$,!$e(B
e$B:#$Ne(B 1.9 e$B$C$F!$e(BThread e$B@ZBX$($,$b$N$9$4$/CY$/$J$C$F$$$?$j$7$^$9$+!)e(B

ruby 1.9.2dev (2009-09-19) [i686-linux] e$B$G;n$7$F$$$?$N$G$9$,!$e(B
e$B<!$N%9%/%j%W%He(B (1) e$B$G$"$l$P!$e(B1.8 e$B$HF1MM$K$9$0$K%&%#%s%I%&$,=P$^$9!%e(B
e$B$G$9$,!$e(B
-----(2)-----------------------------------------------------
e$B$de(B
-----(3)-----------------------------------------------------
e$B$G$O$H$s$G$b$J$/CY$/$J$C$F$7$^$$$^$9!%e(B

e$B<j85$G;n$7$?8B$j!“e(Blinuxe$B$Ge(Blocalhoste$B!”$"$k$$$Oe(BMac OS
Xe$B$Ge(Bmactke$B$G$Oe(B
e$B:9$O$o$+$j$^$;$s!#$?$@!"e(Blinuxe$B$+$ie(BOS
Xe$B$Ne(BX11e$B$K=P$9$H$-$K$Oe(B(1)e$B$He(B
(3)e$B$G$Oe(B6~7e$BICDxEY$J$N$KBP$7$Fe(B(2)e$B$O==?tIC6a$/$+$+$j$^$7$?!#e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Nobuyoshi N. [email protected]
Subject: [ruby-dev:39355] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Sun, 20 Sep 2009 19:21:53 +0900
Message-ID: [email protected]

-----(3)-----------------------------------------------------
e$B$G$O$H$s$G$b$J$/CY$/$J$C$F$7$^$$$^$9!%e(B

e$B<j85$G;n$7$?8B$j!“e(Blinuxe$B$Ge(Blocalhoste$B!”$"$k$$$Oe(BMac OS Xe$B$Ge(Bmactke$B$G$Oe(B
e$B:9$O$o$+$j$^$;$s!#$?$@!"e(Blinuxe$B$+$ie(BOS Xe$B$Ne(BX11e$B$K=P$9$H$-$K$Oe(B(1)e$B$He(B
(3)e$B$G$Oe(B6~7e$BICDxEY$J$N$KBP$7$Fe(B(2)e$B$O==?tIC6a$/$+$+$j$^$7$?!#e(B

e$B$=$&$G$9$+!%e(B
e$B<j85$N4D6-$,8E$$$3$H$K$h$k0c$$$b$"$k$N$+$b$7$l$^$;$s$M!%e(B
e$B$A$J$_$K<j85$N4D6-$Oe(B Vine 3.2 e$B%Y!<%9$Ge(B kernel e$B$Oe(B
2.6.15.4e$B!$e(B
rpm -q glibc e$B$NEz$($Oe(B glibc-2.3.3-3vl1.3 e$B$G$9!%e(B

e$B$3$A$i$G$Oe(B 1.8 e$B$de(B (1) e$B$G$Oe(B 1
e$BIC0JFb$KI=<($r40N;$9$k$N$KBP$7!$e(B
(2) e$B$de(B (3) e$B$OI=<(40N;$^$G$Ke(B 5 e$BICDxEY$+$+$j$^$9!%e(B
e$BJL%^%7%s$Ne(B X e$B$KI=<($5$;$k>l9g$K$D$$$F$O!$e(B
e$B$3$N%a!<%k$r=q$$$F$$$k8=:_$Oe(B 2nd e$B%^%7%s$,$J$/!$e(B
e$B%F%9%H$G$-$k4D6-$K$"$j$^$;$s!%e(B

e$B0J2<$OG0$N$?$a$G$9$,!%e(BRuby/Tk e$B$K$*$$$Fe(B
TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD == true e$B$N>l9g$H$$$&$N$Oe(B
e$B%$%Y%s%H%k!<%W$N<BBN$,e(B Tk.mainloop e$B$GF0$$$F$$$k>uBV$G$9!%e(B
e$B$3$N;~$K$Oe(B Thread.new{Tk.mainloop} e$B$J$I$H$7$Fe(B
e$B%a%$%s%9%l%C%I0J30$Ge(B Tk.mainloop
e$B$rF0$+$9$h$&$J$3$H$O5v$5$l$^$;$s!%e(B

e$B$=$&$G$J$$>l9ge(B (1.9 e$B$G$N%G%U%)%k%He(B) e$B$K$O!$e(B
tk.rb e$B$Ne(B require e$B;~$K%$%Y%s%H%k!<%W$N<BBN$H$J$k%9%l%C%Ie(B
(Tk e$B%$%s%?!<%W%j%?$N=i4|2=$bF1%9%l%C%I>e$G9T$o$l$ke(B)
e$B$r5/F0$7$F$*$-!$e(B
Tk.mainloop e$B$OC1$J$kBT$A$r9T$&$@$1$H$J$C$F$$$^$9!%e(B

e$B$3$N$h$&$K$J$C$F$$$kM}M3$O!$e(B
Tk e$B$Oe(B Tk e$B$N=i4|2=$r9T$C$?e(B native thread e$B>e$G$7$+e(B
e$B@5$7$/F0:n$7$J$$$?$a$G$9!%e(B

e$B%$%Y%s%H%k!<%W$H$O0[$J$ke(B native thread e$B$+$i$N8F$S=P$7$Oe(B
e$B%$%Y%s%H%k!<%W$Ne(B native thread e$B$KAw$i$l$F=hM}$5$l$^$9!%e(B
e$B$b$A$m$s!$=hM}$r0MMj$7$?J}$Ne(B native thread e$B$Oe(B
e$B7k2L$r<u$1<h$k$^$GBT$A>uBV$H$J$j$^$9!%e(B
e$B%5%s%W%ke(B (2) e$B$He(B (3) e$B$H$O$3$N>uBV$G$9!%e(B

e$B!!$5$5$@$G$9!%e(B

Hidetoshi NAGAI wrote::

e$BK;$7$/$F;C$/J|CV$7$F$$$F!$:#F|!$5W$7$V$j$KF0$+$7$F$_$?$N$G$9$,!$e(B
e$B:#$Ne(B 1.9 e$B$C$F!$e(BThread e$B@ZBX$($,$b$N$9$4$/CY$/$J$C$F$$$?$j$7$^$9$+!)e(B

e$B!!$A$J$$K!$e(BCPU
e$B$H$+4D6-$O$J$s$G$7$g$&$+!%e(BSMPe$B!J%^%k%A%3%"$J$I!K4D6-$@e(B
e$B$H!$CY$/$J$k$3$H$,$o$+$C$F$$$F!$$J$s$H$+$7$?$$$J$!!$$H;W$$$J$,$i?tG/$?$Ce(B
e$B$F$7$^$$$^$7$?!%e(B1.9.2 e$B$^$G$K$O$J$s$H$+$9$k!$M>M5$,M
$7$$!%e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: SASADA Koichi [email protected]
Subject: [ruby-dev:39358] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Sun, 20 Sep 2009 23:57:02 +0900
Message-ID: [email protected]

Hidetoshi NAGAI wrote::

e$BK;$7$/$F;C$/J|CV$7$F$$$F!$:#F|!$5W$7$V$j$KF0$+$7$F$$?$N$G$9$,!$e(B
e$B:#$Ne(B 1.9 e$B$C$F!$e(BThread e$B@ZBX$($,$b$N$9$4$/CY$/$J$C$F$$$?$j$7$^$9$+!)e(B
e$B!!$A$J$
$K!$e(BCPU e$B$H$+4D6-$O$J$s$G$7$g$&$+!%e(BSMPe$B!J%^%k%A%3%"$J$I!K4D6-$@e(B
e$B$H!$CY$/$J$k$3$H$,$o$+$C$F$$$F!$$J$s$H$+$7$?$$$J$!!$$H;W$$$J$,$i?tG/$?$Ce(B
e$B$F$7$^$$$^$7$?!%e(B1.9.2 e$B$^$G$K$O$J$s$H$+$9$k!$M>M5$,M_$7$$!%e(B

e$B4D6-$Oe(B [ruby-dev:39357] e$B$K=q$$$?DL$j$G$9!%e(B
e$B%^%7%s$Oe(B Let’s NOTE Y4 e$B$G!$e(BCPU e$B$Oe(B Pentium M 1.6 GHz
e$B$G$9!%e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: SASADA Koichi [email protected]
Subject: [ruby-dev:39358] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Sun, 20 Sep 2009 23:57:02 +0900
Message-ID: [email protected]

e$B!!$A$J$$K!$e(BCPU e$B$H$+4D6-$O$J$s$G$7$g$&$+!%e(BSMPe$B!J%^%k%A%3%"$J$I!K4D6-$@e(B
e$B$H!$CY$/$J$k$3$H$,$o$+$C$F$$$F!$$J$s$H$+$7$?$$$J$!!$$H;W$$$J$,$i?tG/$?$Ce(B
e$B$F$7$^$$$^$7$?!%e(B1.9.2 e$B$^$G$K$O$J$s$H$+$9$k!$M>M5$,M
$7$$!%e(B

Thread#raise e$B$,6KC<$KCY$/$J$C$F$$$?$j$7$^$;$s$+!)e(B
e$B$3$&$$$&$Ne(B(e$B"-e(B)e$B$re(B 1.8 e$B$He(B 1.9 e$B$H$G;n$9$H!$e(B
----<a.rb>---------------------------------------
th = Thread.new{
begin
sleep
rescue
retry
end
}
1000.times{
Thread.pass until th.status == ‘sleep’
th.raise RuntimeError.new(‘hoge’)
}

e$B$3$s$J46$8e(B(e$B"-e(B)e$B$K$J$j$^$9!%e(B

$ ruby -v
ruby 1.8.8dev (2009-08-07 revision 24442) [i686-linux]

$ time ruby a.rb
real 0m0.044s
user 0m0.040s
sys 0m0.004s

$ ruby19 -v
ruby 1.9.2dev (2009-09-19) [i686-linux]

$ time ruby19 a.rb
real 1m47.132s
user 0m0.012s
sys 0m0.004s

e$B$&$A$N4D6-$@$1$NLdBj$G$7$g$&$+!%e(B

e$B$J$+$@$G$9!#e(B

At Mon, 21 Sep 2009 16:52:33 +0900,
Hidetoshi NAGAI wrote in [ruby-dev:39360]:

1000.times{
Thread.pass until th.status == ‘sleep’
th.raise RuntimeError.new(‘hoge’)
}

e$B?t==%Q!<%;%s%HDxEYCY$a$G$9$,!"e(B2000e$BG$K$O$[$I1s$$$G$9$M!#e(B

$ cat ruby-dev-39360.rb
require ‘benchmark’
Benchmark.bm do |bm|
bm.report {
th = Thread.new{
begin
sleep
rescue
retry
end
}
1000.times{|i|
begin
Thread.pass
abort “thread died at #{i}” unless status = th.status
end until th.status == ‘sleep’
th.raise(‘hoge’)
}
}
end

$ ruby18 ruby-dev-39360.rb
user system total real
0.030000 0.010000 0.040000 ( 0.040728)
$ ruby19 ruby-dev-39360.rb
user system total real
0.030000 0.030000 0.060000 ( 0.063855)

2009/9/24 Hidetoshi NAGAI [email protected]:

e$B$3$A$i$N4D6-$G$O!$0J2<$N$h$&$J$H$s$G$b$J$$7k2L$rJV$7$F$-$^$9!%e(B(^_^;

$ ruby19 ruby-dev-39360.rb
user system total real
0.000000 0.000000 0.000000 (116.961908)

e$BKhEY$G$9$,!"1J0f$5$s$Oe(B LinuxThreads
e$B$r;H$C$F$$$k$;$$$G$O$J$$$+$H!#e(B

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html
e$B$h$j0zMQe(B:

LinuxThreads e$B$N@)8B$H$7$Fe(B

  • times(2) e$B$He(B getrusage(2) e$B$,JV$9>pJs$,%W%m%;%9A4BN$N>pJs$G$J$/%9%l%C%IC10L$N>pJs$G$"$k!#e(B

Benchmark e$B$Oe(B Process.times e$B$r8F$S=P$7!"e(BProcess.times
e$B$Oe(B times(2) e$B$r;H$C$Fe(B
e$B$$$^$9!#e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Nobuyoshi N. [email protected]
Subject: [ruby-dev:39364] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Wed, 23 Sep 2009 12:36:18 +0900
Message-ID: [email protected]

e$B?t==%Q!<%;%s%HDxEYCY$a$G$9$,!"e(B2000e$BG$K$O$[$I1s$$$G$9$M!#e(B
(snip)
$ ruby18 ruby-dev-39360.rb
user system total real
0.030000 0.010000 0.040000 ( 0.040728)
$ ruby19 ruby-dev-39360.rb
user system total real
0.030000 0.030000 0.060000 ( 0.063855)

e$B$3$A$i$N4D6-$G$O!$0J2<$N$h$&$J$H$s$G$b$J$$7k2L$rJV$7$F$-$^$9!%e(B(^_^;

$ ruby -v
ruby 1.8.8dev (2009-08-07 revision 24442) [i686-linux]
$ ruby ruby-dev-39360.rb
user system total real
0.050000 0.020000 0.070000 ( 0.078885)
$ ruby19 -v
ruby 1.9.2dev (2009-09-19) [i686-linux]
$ ruby19 ruby-dev-39360.rb
user system total real
0.000000 0.000000 0.000000 (116.961908)

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: KUBO Takehiro [email protected]
Subject: [ruby-dev:39374] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Sat, 26 Sep 2009 13:31:06 +0900
Message-ID:
[email protected]

e$BKhEY$G$9$,!"1J0f$5$s$Oe(B LinuxThreads e$B$r;H$C$F$$$k$;$$$G$O$J$$$+$H!#e(B
(snip)
LinuxThreads e$B$N@)8B$H$7$Fe(B

  • times(2) e$B$He(B getrusage(2) e$B$,JV$9>pJs$,%W%m%;%9A4BN$N>pJs$G$J$/%9%l%C%IC10L$N>pJs$G$"$k!#e(B
    Benchmark e$B$Oe(B Process.times e$B$r8F$S=P$7!"e(BProcess.times e$B$Oe(B times(2) e$B$r;H$C$Fe(B
    e$B$$$^$9!#e(B

e$B$"!$$$$(!$$=$N@)8B$G=PNO$,L50UL#$J$N$OFC$KLdBj$K$7$F$J$$$s$G$9!%e(B
e$B!V$H$s$G$b$J$$!W$H$$$&$N$Oe(B

 user     system      total        real

0.000000 0.000000 0.000000 (116.961908)
^^^^^^^^^^
e$B$3$A$i$G$9!%e(B
e$B$3$N?tCM$O7WB,$NLdBj$K$h$k0[>oCM$G$O$J$/!$e(B
e$B8=<B$K$=$l$@$1$N$H$s$G$b$J$$;~4V$,$+$+$j$^$9!%e(B

LinuxThreads e$B$r;H$C$F$$$k$N$,0-$$$H8@$o$l$l$Pe(B
e$B$=$l$O$=$&$J$N$+$b$7$l$^$;$s$,!$e(B
e$B!V$=$s$J5l<04D6-$O%5%]!<%H30!W$H8@$o$l$kDx$K$Oe(B
e$B8E$$4D6-$G$O$J$$$H;W$$$^$9!%e(B

e$B;d$N$_$N$3$H$G$“$l$Pe(B
e$B!V$^$!!$$A$g$C$H8E$/$J$C$?4D6-$@$7!$$”$-$i$a$F99?7$9$k$+!W$H$+!$e(B
e$B!V$3$N4D6-$G$Oe(B 1.8 e$B$@$1$H;H$C$H$/$+!W$G$b$$$$$N$G$9$,!$e(B
Ruby/Tk e$B$N%5%]!<%H$KCWL?E*$K1F6A$7$^$9$N$G:$$C$F$^$9!%e(B

e$B!Ve(B1.9 e$B$G$Oe(B LinuxThreads
e$B$O%5%]!<%H30!W$H$9$k$N$G$“$l$P$”$-$i$a$^$9$,!$e(B
e$B0JA0$Ke(B Ruby/Tk e$B4X78$G$Ne(B commit e$B$r$7$?:]e(B
(e$B#87n>e=\e(B) e$B$K$Oe(B
e$B$3$NLdBj$O@8$8$F$$$^$;$s$G$7$?e(B (e$B$H;W$$$^$9e(B) e$B$N$Ge(B
e$B$"$-$i$a$k$K$O$^$@Aa$$$H9M$($F$$$^$9!%e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Hidetoshi NAGAI [email protected]
Subject: [ruby-dev:39375] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Sat, 26 Sep 2009 16:47:29 +0900
Message-ID: [email protected]

e$B!Ve(B1.9 e$B$G$Oe(B LinuxThreads e$B$O%5%]!<%H30!W$H$9$k$N$G$“$l$P$”$-$i$a$^$9$,!$e(B
e$B0JA0$Ke(B Ruby/Tk e$B4X78$G$Ne(B commit e$B$r$7$?:]e(B (e$B#87n>e=\e(B) e$B$K$Oe(B
e$B$3$NLdBj$O@8$8$F$$$^$;$s$G$7$?e(B (e$B$H;W$$$^$9e(B) e$B$N$Ge(B
e$B$"$-$i$a$k$K$O$^$@Aa$$$H9M$($F$$$^$9!%e(B

e$B$9$$^$;$s!%e(B
e$B>/$7;~4V$r:n$C$F5l$$%P!<%8%g%s$G$b%F%9%H$7$?$H$3$m!$e(B
e$BF1$8>u67$,@8$8$^$7$?!%e(B
e$B<j85$N4D6-$N%$%s%9%H!<%k>uBV$KIT6q9g$r@8$8$5$;$F$7$^$C$?$N$,e(B
e$B860x$+$b$7$l$^$;$s!%e(B
e$B$b$&$A$g$C$HD4$Y$F$
$^$9!%e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: Hidetoshi NAGAI [email protected]
Subject: [ruby-dev:39382] Re: [ruby19] Thread e$B@ZBX$($,0[>o$KCY$$!)e(B
Date: Sun, 27 Sep 2009 12:22:18 +0900
Message-ID: [email protected]

e$B>/$7;~4V$r:n$C$F5l$$%P!<%8%g%s$G$b%F%9%H$7$?$H$3$m!$e(B
e$BF1$8>u67$,@8$8$^$7$?!%e(B
e$B<j85$N4D6-$N%$%s%9%H!<%k>uBV$KIT6q9g$r@8$8$5$;$F$7$^$C$?$N$,e(B
e$B860x$+$b$7$l$^$;$s!%e(B
e$B$b$&$A$g$C$HD4$Y$F$_$^$9!%e(B

e$B$^$::G=i$K!$$4$a$s$J$5$$!%e(B
e$B7k6I$N$H$3$m!$e(BOS e$B$,0[>oF0:n>uBV$K$"$C$?$h$&$G$9!%e(B

e$B$+$J$j@N$N%P!<%8%g%s$KLa$7$F$_$F$b0[>o$KCY$$$?$a!$e(B
e$B2?$+e(B OS
e$B4D6-$r$$$8$C$?$+$I$&$+$r9M$($?$N$G$9$,$I$&$7$F$b;W$$IU$+$:!$e(B
e$B;EJ}$J$$$N$Ge(B reboot e$B$7$?$i>I>u$,$*$5$^$j$^$7$?!%e(B

e$B%W%m%;%9!$%a%b$jMxMQ>u67$H$b$KIi2Y$O9b$$>uBV$K$O$J$/!$e(B
e$BB>$N%"%W%j%1!<%7%g%s$G$NF0:n0[>o$bA4$/8+$i$l$J$$e(B
(ruby 1.9 e$B$@$1$G0[>o$,BN46$5$l$?e(B) e$B$J$I!$e(B
OS e$B<+BN$N0[>o$OA4$/G’<1$G$-$J$+$C$?$?$a$Ke(B
1.9 e$B$G$N0[>o$H;W$$$3$s$G$$$^$7$?!%e(B

e$B2?$,860x$G$I$3$K0[>o$,@8$8$?$N$+$OJ,$+$i$:$8$^$$$J$N$O5$$K$J$j$^$9$,!$e(B
e$B$$$:$l$K$7$F$bEvJ}$N@UG$$H$$$&$3$H$GKk$r0z$-$^$9!%e(B

e$B$A{$,$;$7$FLBOG$r$$+$1$7$F$7$^$$!$K\Ev$K$9$_$^$;$s$G$7$?!%e(B