アカウント名:
パスワード:
カーネルスレッドを利用せずOS資源的には1スレッド内で複数のコード/スタックを自前でスケジューリングするとかじゃないですよね?タスクスイッチやOS資源的には軽くなるけどマルチコアが活かせないし工夫しないとブロッキングI/Oで全部止まっちゃう古式ゆかしい実装ですが
カーネルスレッドとかネイティブスレッドってキーワードを知ってる老人から見ると、何を今更って話ですね。 んなもん setjump() と longjump() 使えばC言語でも実装できるわ!rubyなんて当初からそうやって実装されてるわ!余計な機能入れるな!などなど言いたいことは沢山あるでしょう。
違うんですよ。
最近はコルーチンとかが流行っていて、 C++でさえ C++20でコルーチンを採用するような時代なのです。つまり java もやっと流行に追いついただけ。
実際に使うときは M:Nスレッドにして正しく使えば、ブロッキングI/Oで全部止まることもなくタスクスイッチなどのオーバヘッドも回避できます。
コルーチンってそれこそC言語しかなかった時代にはもうあった言葉では…
コルーチンは、プアマンズスレッドみたいな扱いされてたことがあるけど、ここ5年か10年くらいで、コルーチンであることが見直されて流行り出してるんですよ。ラムダとかと一緒。概念や実装そのものは、80年代とか70年代とかに出てるけど、最近になって見直されてる。
# なんかソフトウェア業界の流行り廃りは間隔が早いって言われるが、言語仕様の流行りだと5年、10年単位だな。
更に時代はめぐってselect,pollが流行の最先端に
スマホも出てきてしばらくしてから「マルチタスクに対応した!」とか言ってたしな
Windowsのストアアプリも出てきてしばらくしてから「マルチウィンドウに対応した!」とか言ってたしな。
当初は割に合わなかったものも現代では誤差にしかならんからおkみたいなのもあるんじゃないかな
Cより古い。(1963)
UNIXがコルーチン(ぽいもの)で書かれていた……てなはなしはLions本にも書いてありましたね
コルーチンはyieldの前後で実行するスレッドが変わることがあるので、STAなCOMと一緒に使うとドはまりするので要注意ですね。
そんな(マイナーではないけど)一部の実装に限ったことを…
Thread Local Storageもな
Fiber実装になってないの?
fiber的にすることで、あえてスレッドを乗り換えることができる実装がある。UIスレッドは止めちゃダメなフレームワークなとき、ソース上の区切りのいいところからワーカスレッドにきれいに移れる。そういう目的・仕組みを理解して使ってねってこと。
GILが邪魔なのでスレッドはあんま使いません
WindowsのFiber以外で実行するスレッドが変わる実装なんてあるか?
昔、コルーチンをsetjump/longjumpで無理矢理実装して、嵌った老人が来ましたよっと。setjumpは実装によって、全部のレジスタが保存されるとは限らないのよね。あと、スタックをOSの想定していない場所に配置すると動作がおかしくなったり。。。
Linuxカーネルのworkerと何が違うのって思う。あれも自前でworkqueue用意するとかしない限り、各CPU毎のkworkerで良い感じに処理してくれるしなぁ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
green thread? (スコア:0)
カーネルスレッドを利用せずOS資源的には1スレッド内で複数のコード/スタックを自前でスケジューリングするとかじゃないですよね?
タスクスイッチやOS資源的には軽くなるけどマルチコアが活かせないし工夫しないとブロッキングI/Oで全部止まっちゃう古式ゆかしい実装ですが
Re: green thread? (スコア:0)
カーネルスレッドとかネイティブスレッドってキーワードを知ってる老人から見ると、何を今更って話ですね。 んなもん setjump() と longjump() 使えばC言語でも実装できるわ!rubyなんて当初からそうやって実装されてるわ!余計な機能入れるな!などなど言いたいことは沢山あるでしょう。
違うんですよ。
最近はコルーチンとかが流行っていて、 C++でさえ C++20でコルーチンを採用するような時代なのです。つまり java もやっと流行に追いついただけ。
実際に使うときは M:Nスレッドにして正しく使えば、ブロッキングI/Oで全部止まることもなくタスクスイッチなどのオーバヘッドも回避できます。
Re: (スコア:0)
コルーチンってそれこそC言語しかなかった時代にはもうあった言葉では…
Re: Re: green thread? (スコア:1)
コルーチンは、プアマンズスレッドみたいな扱いされてたことがあるけど、ここ5年か10年くらいで、コルーチンであることが見直されて流行り出してるんですよ。
ラムダとかと一緒。
概念や実装そのものは、80年代とか70年代とかに出てるけど、最近になって見直されてる。
# なんかソフトウェア業界の流行り廃りは間隔が早いって言われるが、言語仕様の流行りだと5年、10年単位だな。
Re: (スコア:0)
更に時代はめぐってselect,pollが流行の最先端に
Re: (スコア:0)
スマホも出てきてしばらくしてから「マルチタスクに対応した!」とか言ってたしな
Re: (スコア:0)
Windowsのストアアプリも出てきてしばらくしてから「マルチウィンドウに対応した!」とか言ってたしな。
Re: (スコア:0)
当初は割に合わなかったものも現代では誤差にしかならんからおk
みたいなのもあるんじゃないかな
Re: (スコア:0)
Cより古い。(1963)
Re: Re: Re: Re: green thread? (スコア:2)
UNIXがコルーチン(ぽいもの)で書かれていた……てなはなしはLions本にも書いてありましたね
Re: (スコア:0)
コルーチンはyieldの前後で実行するスレッドが変わることがあるので、
STAなCOMと一緒に使うとドはまりするので要注意ですね。
Re: (スコア:0)
そんな(マイナーではないけど)一部の実装に限ったことを…
Re: (スコア:0)
Thread Local Storageもな
Re: (スコア:0)
Fiber実装になってないの?
Re: (スコア:0)
fiber的にすることで、あえてスレッドを乗り換えることができる実装がある。
UIスレッドは止めちゃダメなフレームワークなとき、ソース上の区切りのいいところからワーカスレッドにきれいに移れる。
そういう目的・仕組みを理解して使ってねってこと。
Re: (スコア:0)
GILが邪魔なのでスレッドはあんま使いません
Re: (スコア:0)
WindowsのFiber以外で実行するスレッドが変わる実装なんてあるか?
Re: (スコア:0)
昔、コルーチンをsetjump/longjumpで無理矢理実装して、嵌った老人が来ましたよっと。
setjumpは実装によって、全部のレジスタが保存されるとは限らないのよね。
あと、スタックをOSの想定していない場所に配置すると動作がおかしくなったり。。。
Re: green thread? (スコア:1)
// まあアレは返ってこれればおk くらいの実装だからなぁ
Re: (スコア:0)
Linuxカーネルのworkerと何が違うのって思う。
あれも自前でworkqueue用意するとかしない限り、各CPU毎のkworkerで良い感じに処理してくれるしなぁ。