[解決済み】糸と繊維の違いは何ですか?
質問
糸と繊維の違いは何ですか?rubyのファイバーは聞いたことがあるし、他の言語でも使えると聞いたことがあるのですが、どなたかスレッドとファイバーの違いをわかりやすく説明していただけませんか?
どのように解決するのですか?
最も単純に言えば、スレッドは一般にプリエンプティブであると考えられており(OSによっては必ずしもそうでない場合もありますが)、ファイバーは軽量で協調的なスレッドであると考えられています。どちらも、アプリケーションの実行経路としては別物です。
スレッドの場合:現在の実行パスはいつでも中断または先取りされる可能性があります(注:この記述は一般論であり、OS/スレッドパッケージ/その他によって常に正しいとは限りません)。つまり、スレッドにとってデータの整合性は大きな問題であり、あるスレッドがデータの塊を更新している途中で停止し、データの整合性が悪い状態や不完全な状態で放置される可能性があるということです。これは、OSが複数のスレッドを同時に実行することで複数のCPUやCPUコアを活用し、データアクセスのガードを開発者に任せることができることも意味しています。
ファイバーの場合:現在の実行経路は、ファイバーが実行をゆだねるときのみ中断されます(上記と同じ注意点)。つまり、ファイバーは常に明確に定義された場所で開始・停止するため、データの整合性が問題になることは非常に少なくなります。また、ファイバーはユーザー空間で管理されることが多いため、高価なコンテキストスイッチやCPUの状態変更を行う必要がなく、あるファイバーから次のファイバーへの変更が非常に効率的です。一方、2つのファイバーをまったく同時に実行することはできないので、ファイバーを使うだけでは、マルチCPUやマルチCPUコアの利点を生かすことはできない。
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] JavaにおけるRunnableインターフェースとCallableインターフェースの違いについて
-
[解決済み] タスクとスレッドの違いは何ですか?
-
[解決済み] デッドロックとライブロックの違いは何ですか?
-
[解決済み】atomic / volatile / synchronizedの違いは何ですか?
-
[解決済み】糸と繊維の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Dask: dask delayでどのようにコードを並列化するか?
-
[解決済み] POSIXシステムでのゾンビスレッド
-
[解決済み] "フリースレッド "と "スレッドセーフ "の違いについて
-
[解決済み] Win32 InterlockedExchange関数はどのような場合に使用するのですか?
-
[解決済み] デッドロックとは何ですか?
-
[解決済み】「スレッド」とは(本当は)何ですか?)
-
[解決済み】セマフォとモニター、何が違うの?
-
[解決済み】Node.jsに対するHaskellの対応について教えてください。
-
[解決済み】並行処理、並列処理、非同期メソッドの違いは何ですか?
-
[解決済み] Re-entrantロックとは何ですか?