並行処理をするには?

解決


りょうたろう  2005-03-19 02:30:00  No: 56709

始めまして、最近C++の勉強を始めたものです。
Cから移行して並行処理のことで詰まりました…
こっちでループしつつ、こっちでリッスン状態を維持みたいなサーバーを作ろうと思っています。

Cから移行したもんで2つのものを同時に動かすなんてわけがわかりません><
何か参考になる文献とか、サンプル、またはアドバイスをいただけますか?


REE  2005-03-19 02:49:21  No: 56710

これは、CとC++の違いとは特に関係ない問題です。

具体的なことは、環境が分からないので書くことは出来ませんが、
「マルチスレッド」をキーワードに調べてみてください。


りょうたろう  2005-03-19 06:52:53  No: 56711

ありがとうございます!
とりあえず、キーワード検索してみます。


りょうたろう  2005-03-19 19:31:52  No: 56712

ちなみにシグウィンを使ってコンパイルしてOSはWinXPです。
環境を伝えるのにまだ足りないものとかありますか?


Ban  2005-03-19 21:58:53  No: 56713

特にハードに依存するものでもないので、最低限はその程度でいいと思います。
(それで、VC や Win32 がメインでないことがわかります)

並列処理は、大きな方針として「マルチプロセス」と「マルチスレッド」が
あります。主な違いは、並列動作中に各情報をどの程度共有するかで、
前者は情報のコピーをそれぞれ持ち、後者は同じ情報を共有するイメージです。

共有する情報が多いほど互いは緊密な関係になり情報交換が楽になりますが、
(マルチプロセスではプロセス間通信しないといけないものが、
スレッドではそのまま変数として参照できる、とか)
逆に、取り合いになる可能性を考慮する(排他制御)必要がでてきたり、
何か問題がおきたときに共倒れになる可能性があがったりします。

互いにトレードオフがありますので、両方の違いを簡単に調べてみて、
より適切だと思われる方を採用されるといいと思います。

マルチプロセスの場合は「fork」「プロセス間通信(IPC)」
マルチスレッドの場合は「POSIX thread (pthread)」
などがキーワードになるかと思います。

# もし、Win32 (SDK) だと CreateProcess/CreateThread などが、
# VC (MFC) だと CWinThread などがキーワードになってきます。


Ban  2005-03-19 22:09:56  No: 56714

> 特にハードに依存するものでもないので、最低限はその程度でいいと思います。

補足:
並列処理の性能面などは実行するハード(特にCPU)にかなり依存します。
  CPU の種類と数(デュアルマシンとか、ハイパースレッディングとか)。

私は Cygwin を使ってないので、XP 上の Cygwin 上からどの程度資源を
有効に使えるのか分かりませんが。


りょうたろう  2005-03-23 01:52:58  No: 56715

かなり詳しいお返事ありがとうございます!
お二人のおかげでなんとかなりそうです♪
また何か質問することがあればよろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加