- ベストアンサー
C言語でマルチタスクプログラミングを実現する方法
- C言語でマルチタスクプログラミングを実現する方法について解説します。
- C言語の経験が少ない場合でも、マルチタスクプログラミングを実現するための具体的な方法を学ぶことができます。
- マルチタスクプログラミングを導入することで、データの移行時間を短縮することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
マルチスレッドにすること自体はすごく単純です。 バッチファイルを別データで複数走らせるだけです。 ご自分でマルチスレッドにしなくてもOSがやってくれます。 勿論、今回のケースでは意味が無いでしょうけど。 そもそもデータ変換はプログラムの時点でマルチスレッドが 必要とされる処理ではありません。 それからポインタが分かるくらいでマルチスレッドのプログ ラミングは敷居が高すぎて、説明も困難と思います。 もっと言えば、WindowsでしたらVisual C/C++などで作られる プログラムは元々マルチスレッドです。 これはWindowやマウス/キーボードなどの管理がマルチスレッド 処理を要求するためです。 何度も書きますがデータ変換ではマルチスレッドプログラミングの 要件にはならないでしょう。
その他の回答 (3)
- Tasuke22
- ベストアンサー率33% (1799/5383)
失礼、マルチタスクでしたね。 言葉が違いますが、マルチスレッドと同じことです。
お礼
まだまだ勉強が必要ってことですね
- g_liar
- ベストアンサー率52% (382/728)
たかが数十万件でなんで半年もかかるのか不思議です。 コンピュータやOSに何を使っているか書かれていませんので一般論になりますが…。 いくらマルチタスク化してもコンピュータの性能が上がるわけではありません。 データ移行プログラムが非常に多くのウエイトをしながらゆっくり処理していてCPU使用率が低いのなら、マルチ化したらCPUを有効に使え、早く終わることになりますが・・・ データ移行プログラムは普通はそんな作り方はしないと思います。 1本のプログラムが1つのCPUを100%使っていた場合、マルチ化して2本にすると1本あたりは50%しか使わなくなり(実際はタスク切り替えが走るので50%未満になる)シングルで処理した場合と同等以下のスピードにしかなりません。 もしもプログラムを実行するコンピュータが、複数個のCPUやマルチコアのCPUを搭載している場合なら「マルチスレッド化」すれば早くなります。 ただ、まずは、たかが数十万件で半年もかかるプログラムの見直しをされてみては? どこで時間がかかっているか特定できますか? 冗長な処理はないでしょうか?
お礼
マルチスレッドにするにはどうしたらいいのでしょうか
- chie65536(@chie65535)
- ベストアンサー率44% (8754/19864)
>工夫無しですと理論値で半年かかることがわかり マルチタスクにしても「1台のPCで半年かかる」のは変わりません。 逆に、マルチタスクにした場合「マルチタスクのオーバーヘッド」の分だけ、余計に時間がかかります。 >また、ほかにもっとこっちのほうがいいとかありましたらご教授ください。 ぶっちゃけて言えば「シンプルなプログラムで、複数台のPCで同時進行」が最も効果的。 例えば、5台のPCを用意し、データを5分割(50万件あるなら、10万件づつ)して、5台同時に処理を開始すれば良いのです。たったそれだけで「5分の1の時間」で終ります。 てゆ~か、当方も100万件クラスのデータを扱う事がありますが、どんな複雑な処理でも「全件やったら半年かかる」なんて事は起きません。 たぶん、処理開始のオーバーヘッドにかかる時間など「件数に掛け算してはいけない時間」も掛け算してしまったなど「論理値の求め方が間違っている」と思われます。 「1件あたりにかかる時間」を求める場合は以下のようにします。 1.「1件」を処理した場合の時間を計る 2.「10件」を処理した場合の時間を計る 3.「100件」を処理した場合の時間を計る 4.それぞれが「5.3秒」「6.2秒」「15.3秒」だった場合 t1=a+b=5.3 t2=10a+b=6.2 t3=100a+b=15.3 より、a≒0.1、b≒5.2を求め、aを「1件あたりの時間」とします(bはオーバーヘッドにかかる時間) 上記の場合、100万件では「1000000×0.1+5.2=100005.2秒(約27.7時間)」になります。 「1件で5.3秒だったから」と単純に「1000000×5.2」で計算してしまうと「5200000秒(約60日間)」となり、誤った時間予測をしてしまいます。 どう考えても「予測計算を間違っている」ので「計算に含めない、オーバーヘッド時間を除いて再計算」してみる事をお勧めします。
お礼
おっしゃる通り計算間違いでした
お礼
ありがとうございます。 計算もしなおして、方法も模索しなおしてみます。