AdaでC10K
少なくともPOSIX上のAdaのTaskはカーネルスレッドとして実装されているらしい。
% uname -a Linux ***** 2.6.18-92.1.18.el5 #1 SMP Wed Nov 12 09:19:49 EST 2008 x86_64 x86_64 x86_64 GNU/Linux % /usr/local/gcc4.3/bin/gnat --version GNAT 4.3.2 % /lib64/libc-2.5.so GNU C Library stable release version 2.5, by Roland McGrath et al.
こんな感じの環境で試してみたところ、NPTLでスレッドが増えている様に見える。
試しにTaskを10K個作ってみた。
procedure C10K is
Client_Max : constant := 10_000;
task type Client is
entry Die;
end Client;
task body Client is
begin
accept Die do
null;
end Die;
end Client;
Clients : array (1 .. Client_Max) of Client;
begin
null;
end C10K;
結論から言うと、死んだ。
AdaもC10Kに対応するならばepollなり何なりを使わないとダメなようだ。