[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
箇条書きに近いと思います。読まないことを推奨。
並列処理をするときに問題になるのが資源の開放、ロック、共有のタイミングだ。
教科書分が確か バトンを渡さないと並列ではいつどのスレッドが資源にアクセスして書き込むかわからない。っていうことだけで終わってたはず。なので正直役に立たないと思ったので少し調べようと思ったわけだが、今回はその前準備のまとめ。
論理機械が実際にマルチタスクなのか時間分割なのかでまず違うのが1点。当然時間分割では同時入力が起こったときに片方の情報が捨てられるか、エラーをはいて進む、あるいはとまってしまう。
マルチの場合は資源の処理タイミングが非常に難しい。その二つの入力が同じものを参照しようとするとまたエラーが起こる。これは特に対応関係がおかしくなったり、ID登録であれば、番号が同じところに上書きされることもあるかもしれない。
が、これらは起こってはならない事象なのだ。
ところで2回のときにCでのネットワーク演習の際に同時入力対応をしようとして投げた記憶がある。自己満足としてGUIは実装したのだが、お世辞にも安定性がいいとはいえなかった。実はこのGUIの更新やネットワークの処理も非常にややこしい。GUIの更新は数値などの軽いデータをひっぱってくるだけでなく、演算が必要になるため、ロックの時間が長く、その間にネットワークとの干渉が起こってプログラムが止まりやすくなってしまったりしてしまっていた。つまりたった2つのスレッドで十分に同時入力の大変さが味わえるということだ。
ネットワークは人数が増えると一気に重くなる。しかし非常に分かりやすいスレッドのモデルでもある。
入力が有限の複数個で、受け手が一つの機械という点で理想的な機械だ。
んで、その代表的なものがソケットなのだが、これまた通信中にずっとロックしてしまうためにGUIとあわせるとデッドロックを起こしやすいという困ったやつなのだ。この点に関してはJAVAがどういうアルゴリズムか調べていないが、Cではここら辺の自由度が非常に低い。
んなわけで今回調べるのは主に
同時入力処理
並列自体の種類がないか。
この二つだけでもかなり長時間かかるはず。
むしろ同時入力に関してはできる気がしないが、まぁ やってみよう。皆やってない人が多いけどこれ理解するとソフトウェア開発の敷居がぐっと下がる。
といいつつ理解できていないのだけれど。
というか、ここらへんがないと本当にプレゼンする必要性がないんですよね。くだらなすぎて。
ってなわけでどうにかなるかな。