本物のPOSIXスレッドライブラリ 22
ストーリー by kazekiri
すげーぞUlrich 部門より
すげーぞUlrich 部門より
takahashi曰く、"Linuxカーネルセクションを読まれている方には、単なるリリースの話より、こちらの方が興味を持つでしょう。本物のPOSIXスレッドライブラリの実装ができたそうです。結局1対1モデルを採用したけれども、なかなか悪くなさそう。 詳しくは、 メールアーカイブから続くスレッドを読まれるのが良いでしょう。"
ウヒヒ、すげー確かに"ホンモノ"だ。
モデルはともかく (スコア:3, 参考になる)
Only Jav^Hpanese available :-)
別のところから (スコア:2, 興味深い)
1対1スレッドモデルについて情報があってふ~んと思ったものでした。
(ってどれも首藤さんだね。(^^;。)
プログラマから見ると (スコア:2, 参考になる)
1.
ほとんどの UNIX 系 OS はスレッド毎に異なる signal mask を持てるが、signal handler 自体はプロセスに1つです。 スレッド毎に signal handler を持てると、Windows の構造例外のように「__try の中で起きた signal は __catch 節でキャッチする」ようなプログラムスタイルが可能になるかも。
2.
スレッド固有の情報を指す専用レジスタを導入するようですね。
スレッド構造体 or Thread Local Strage (TLS) の開始ポイントなどを指すレジスタがあって、 ユーザープロセス側はそのレジスタを読めば 自分がどのスレッドか分かるというものだと 思われます
pthread_self API とか GetCurrentThread API を 呼び出す必要がなくなるし、 TLS へのアクセスが高速化されるので、 サーバーサイドのマルチスレッドプログラムが 高速化できますね。
ただ、その特定レジスタはユーザープログラム側で値を破壊しないようにする必要があります。 コンパイラ & ライブラリの変更も必要です。
でも 以前のバイナリとの下位互換性はどうするのでしょう?
OS かスレッドライブラリがプログラムのバージョン情報を取得して、スレッドレジスタを提供するかどうか変えるのかしらん? # x86 は FS レジスタが、すでにスレッドレジスタとして使われているからあまり関係ない?
コンタミは発見の母
Re:プログラマから見ると (スコア:1)
目的として、バイナリ互換もあがっていますね。多分、誰かが何とか
してくれるでしょう(笑)。まぁ冗談はおいておいて、どういう実装が
行われるのかが気になりますね。
Software ScelabilityのところでJavaの話が出てきているので、
簡単に使える、という点で意識しているようです。C++でも例外処理を
交えながら使えるようにするみたい。
This cookie has a scrap of paper inside. It reads:
If you can't learn to do it well, learn to enjoy.
Re:プログラマから見ると (スコア:1)
pthread格闘記
http://pantora.tripod.co.jp/pthread.html [tripod.co.jp]
.::.:... .::....: .::...:: .::.:.:: .::..:.: .:::..:.
I 1 2 B H4[keR. :-)
Re:プログラマから見ると (スコア:0)
Re:プログラマから見ると (スコア:0)
Solaris 9 (スコア:1, 参考になる)
結局そっちのほうがパフォーマンスが良かったという……。
スレッド比較についての記事 (スコア:1, 参考になる)
Linux World Onlineより
http://www.idg.co.jp/lw/back/200108/20010824_01_solaris.html
http://www.idg.co.jp/lw/back/200109/20010924_01_solaris.html
性能的には (スコア:1)
Re:性能的には (スコア:1)
マルチプロセッサのこと考えたら絶対にそんなことありえない。
Re:性能的には (スコア:1)
マルチプロセッサのことは考えていないのでは?
実際スケーラブルっていうのも、
プログラムの設計とかコーディングレベルでの話でしょう。
## で、真意は如何に??
Re:性能的には (スコア:1)
Re:性能的には (スコア:0)
ユーザランドでサーバを書くのに何でカーネルスレッドの話が出てくるんですか?
Re:性能的には (スコア:0)
カーネルスレッドじゃなかったらマルチプロセッサを 活用できませんがな。
# 何をどう勘違いしてるんだか
Re:性能的には (スコア:0)
Re:性能的には (スコア:0)
意味はどちらが正しい訳でもなくて、コンテキスト依存です。オペレーティングシステムの内部処理の話をしているならおっしゃる通りですが、アプリケーションからみたプロセス/スレッドの話なら逆に外れになります。要はシステムのどの要素について話しているかで違うってことです。
Re:性能的には (スコア:0)
カーネルスレッドの意味 (スコア:0)
単に
Re:性能的には (スコア:1)
自前で複数のコンテキストを作る擬似マルチスレッド。
スケジュールはユーザー次第。
複数のCPUを使うためには、プロセスを複製するか 3.のスレッド
を使う必要がある
2. M対Nスレッドやユーザ空間スレッド
スケジュールはライブラリが行う。
3. 1対1スレッド
スケジュールは(ほとんど)カーネルまかせ。
スケジューリングの自由度は 1> 2>3。
ahiguti氏は、3.が1.よりも性能がでるのであれば、
中途半端な 2. は要らないと言っているのでは?
コンタミは発見の母
Re:性能的には (スコア:1)
スケジューラが O(1) 版に (スコア:1, 参考になる)
なんでタレコミに書かなかったのか不思議ですが、並行して新型の O(1) スケジューラも完成しつつあるようで本家の方に話が出ています: