スイッチアウトとスイッチバックの意味

このQ&Aのポイント
  • 「スイッチアウト」と「スイッチバック」という言葉は、「Java並行処理プログラミング」の一部で使われています。これらの言葉は、マルチスレッドのコンテキストスイッチの概念を示しています。
  • 「スイッチアウト」とは、ロックを取得できないスレッドやブロッキングI/Oで何かの条件を持つスレッドが一時停止されることを意味します。これにより、コンテキストスイッチが2回増え、OSやキャッシュまわりの費用が発生します。
  • 一方、「スイッチバック」とは、ブロックされたスレッドが自分の時間量子を使い尽くす前に他のスレッドに切り替わることを意味します。これにより、ロックやその他の資源が利用可能になります。
回答を見る
  • ベストアンサー

スイッチバック・スイッチアウトの言葉の意味

「Java並行処理プログラミング」( http://www.amazon.co.jp/dp/4797337206/ )を読んでいます。 この本の文章に、「スイッチアウト」「スイッチバック」という単語があります。 しかし、単語の意味が解りません。マルチスレッドの用語なのかもしれません。 ご存知の方はいませんか。 「Java並行処理プログラミング」の263ページ「11-3-3・ブロッキング」より引用 > ロックを取得できないスレッドやブロッキングI/Oで何かの条件を持つスレッドを > 一時停止すると、コンテキストスイッチが2回増えることになり、 > それに関連したOSやキャッシュまわりの活動の費用が発生します。 > すなわちブロックされるスレッドは自分の時間量子を使い尽くす前に スイッチアウト され、 > ロックやそのほかの資源が可利用になると スイッチバック されます > (ロックの争奪によるブロックではロックを保有しているスレッドにも費用が生じます > ―そのスレッドがロックを開放するとき、 > ブロックされていたスレッドの続行をOSに求める必要があるからです)。

noname#90015
noname#90015
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.1

スイッチアウト:実行中のプロセスが途中でCPUを明け渡すこと(状態の保存) スイッチバック:プロセスを再開すること(状態の復元)

noname#90015
質問者

お礼

とてもよく解りました。 OKwebbさん、ありがとうございます。

関連するQ&A

  • スレッドの意味

    マルチスレッドについて良い資料が見当たらず、教えて下さい。 OSにおけるマルチスレッドと言うと、同一プロセス内でメモリ空間を 共有して独立に動く一連の手続き、と捉えています。(シングルCPU シングルコアだとOSで時分割によって作られた仮想的な並列計算) Javaのようなマルチスレッドのプログラミング言語では「一つの プログラムから作られた二つの一連の手続き」と言うイメージが あります。※裏側の動作ではOSに依頼してJavaのプロセス内で OSのスレッドを生成して処理を渡しているだけ?と思っています。 CPUコアの内部で説明される「マルチスレッド」と言うのは、 どのようなレベルのスレッド(何が並列処理?何処まで並列?) なのでしょうか。

  • スレッドとは?

    CPU、デュアルコアなどで 話の出る「スレッド」とはどういった意味なのでしょうか?。 Javaなどプログラミングでも「マルチスレッド」という用語がありますが これとはまた意味が違うのか気になっています。

  • 「UIスレッド」「マルチスレッド」の違い

    Androidで、「UIスレッド」「マルチスレッド」の違い、を教えてください。 ■下記理解で合ってるでしょうか? Androidは、「シングルスレッド」の「UIスレッド」モデルなので、それを「マルチスレッド」で動かそうとすると、「ワーカースレッド」で処理する必要がある ・「マルチスレッド」=「マルチタスク」? ・「UIスレッド」とは、メインスレッドが「GUI (グラフィカルユーザーインターフェイス) 処理」を行うものを指す? ・つまり、「Android」=「UIスレッド」? ・「UIスレッド」って何の用語? Androidに特化した用語? それともJAVAの用語? あるいはそれ以外?

    • ベストアンサー
    • Java
  • プロセスとスレッドの違いについて(Cプログラミングの観点から)

    プロセスとスレッドの違いがしっくりきません。 <プロセス> (1)プログラムの実行単位。Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される (2)起動や切り替えのオーバーヘッドが大きい <スレッド> (1)同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できる。 (2)マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。 等はwiki等調べて理解しています。 何が疑問なのかと申し上げますと、具体的にプログラミングする際に (1)マルチプロセスとマルチスレッド方式では、ソースにどのような違いが出てくるか (2)マルチプロセスとマルチスレッド方式では実行時間がどれだけ変化するか がわからないのです。お仕事で並列処理等について担当されている方などおられましたら、お手数ですがご教授ください。 なお、わかりやすい書籍、webサイト等ありましたらそれも併せて教えていただけると助かります。よろしくお願いします。ちなみに、環境はWindowsXP,VisualC++ExpressEdition2005を使っていますので、UNIXよりはWindowsかつCで動くプログラム例で教えていただけると大変助かります。しかし、当方Javaも多少であれば組めますのでJavaでも構いません。 何卒、よろしくお願い致します。

  • 非同期プログラミングは必ずマルチスレッド?

    非同期プログラミングは必ずマルチスレッドプログラミングになりますか? ここでいう非同期プログラミングとは、 何かのメソッドを実行してその処理(処理Aとする)の結果を待たずに次の処理Bを実行できて、処理Aが終わったらコールバックやデリゲートで、あらかじめ決められたメソッド(finishとする)が呼ばれるといったものです。 処理Aを実行するメソッドを呼ぶ ↓ すぐに処理Bを実行開始(このときバックグラウンドで処理Aが走っている) ↓ 処理Aが終了したのでfinishメソッドが実行される 例えば、Objective-CのNSURLConnectionで非同期通信するときのようなやつです。 こういった非同期プログラミングは、必ずマルチスレッドを使うことになりますか? 普通、別スレッドで処理させるときはスレッド用のライブラリを使うなどして明示的にマルチスレッドプログラミングをしますが、上のように非同期のメソッドを使うと、その裏で自動的に別のスレッドが動くのでしょうか。 それとも、単一スレッドのみで、非同期プログラミングできるでしょうか。 なお、特殊な言語やOSによっては、いくらでも可能性があると思いますので、 メジャーな環境(Windowsや、スマホ) のみに限定してお願いします。言語で言うと、C、C++、Objective-C、Javaあたり。 また、上の「処理A」が終わったとき、メソッド「finish」が呼ばれるとすると、 処理Bの実行中にどのようなタイミングでfinishが呼ばれるのでしょうか。 処理Bはどのような形でfinishに切り替わるのでしょうか。いきなりfinishに処理を奪い取られるのでしょうか

  • インスタンスとスレッドの違い

    Javaカテゴリでお訊きすることではないとも思うのですが、今、Javaを勉強中で、その中でもマルチスレッドの段階に入ってきたので、こちらで質問させて頂きました。 インスタンスとスレッドって、要は何が違うのでしょうか。 当方はプログラミング歴自体は、C言語で仕事で10年以上やっていて、その中では、組み込みもやりましたから、当然マルチスレッド環境のソフトにも関わってきましたが、 スレッドの原理的な制御部分はできあがった状態でプロジェクトに参入することが多く、担当を任されたスレッドの中で(要は閉じた中で)の仕事経験しかありません。 そこにきて今、Javaをゼロから勉強してみると、あくまでインスタンスとスレッドは分けて表現されており、 私も本を読み進めてみて、感覚的にはわからないではないですが、ちょっと立ち入った説明になると、双方がごっちゃになりわからなくなってしまいます。 どなたかお教え頂けませんか。 Javaの文法的なことは一通り勉強しましたし、C言語の素地もあるので、難しめの話でも結構ですし、たとえ話でも結構です。よろしくお願いします。

  • C++でシングルスレッドで同期処理すべきか?

     こんばんは。 C++でプログラミングの勉強をしている者ですがシングル スレッドで同期処理をし、メイン処理からそのスレッドを実行した場合は スレッドの処理が終わるまで、そのスレッドに扱われる変数にアクセスできないという 認識で会っていますか? そもそも同期処理というのが、マルチスレッドで、同じメソッドを扱う場合、片方の処理が 終わるまでもう片方の処理は待機しているという認識で合ってますか? メイン処理からスレッドを作成し、スレッドの動きを止め、あるタイミングでスレッドの 処理を再開させる処理をメイン処理で実装することはできるでしょうか?

  • マルチタスクについて

    今現在大量の画像を元に3次元形状の再構成を行うプログラムを作成しているのですが、タスクマネージャを見てもHT(ハイパースレッディング)での2スレッドともにCPU使用率が100%にならず効率がとても悪いです。 そこで両方共に100%となるように処理を2スレッド化して行いたいのですが、何か参考になるようなページはあるでしょうか? 実際にマルチスレッド化ができるのならば画像の枚数を分割して並行処理を行いたいと考えています。 よろしくお願いします。

  • Javaでテトリスを作成(OOPで)

    JavaでGUIのテトリスを作成しているのですが、処理でちょっと困っています。 次のようにオブジェクト指向で作っているのですが、なにか違和感が感じます。 問題点があったら教えてください>< Field.java テトリス全体のmap どこにブロックがあるかを保持 Block.java テトリスのBlock(テトリミノ)のスーパークラス。このサブクラスでそのBlockの形を保持 TetrisProcess.java テトリスの処理をする。Blockの移動、移動できるかを確認。Threadをたてる。 Blockが落ちてくる処理なんですが、TetrisProcessからBlockに『次の形はなに?』と聞いて、Fieldに『次の形はこれだから、下(横)へ進める?』っていう処理を考えているのですがどうでしょうか?? 駄文、本当にごめんなさい・・・

  • マルチスレッドチャットプログラム作成方法

    マルチスレッドでチャットプログラムが組みたいです。 winsockを用いてVC++2010EEで組んでいます。 selectでのC/S型チャットプログラムは組めます。 マルチスレッドプログラムに関しては「猫でもわかるプログラミング」C言語編第1部第99章以降を参考にしました。 このサイトでのプログラムは分かるのですが、いざ自分のチャットプログラムに実装しようとするとどうすればいいのか分からなくなります。 やりたいこと(こうすればいいのだろうと思っていること)は winsockの設定 while(1) { ----SockBuf = accept(略); --------if( SockBuf != INVALID_SOCKET) --------{ ------------MaxClient++; ------------Sock.push_back(SockBuf); --------} ----thread()をSock[0]~Sock[MaxClient-1]ごとにスレッドで動かしたい。 ----その他の処理 } unsigned __stdcall thread() { ----recv(略) ----その他の処理 } どのようにしたらいいのか分からないので教えてください。