C言語でマルチタスクプログラミングを実現する方法

このQ&Aのポイント
  • C言語でマルチタスクプログラミングを実現する方法について解説します。
  • C言語の経験が少ない場合でも、マルチタスクプログラミングを実現するための具体的な方法を学ぶことができます。
  • マルチタスクプログラミングを導入することで、データの移行時間を短縮することができます。
回答を見る
  • ベストアンサー

マルチタスクプログラミング

マルチタスクプログラミング ド素人な質問ですみません、マルチタスクを意識したプログラミングをC言語で実現するにはどうしたらよいのでしょうか? 自前のHPにあるデータ数十万件をバッチを組んでデータの移行を考えていますが、その移行方法として工夫無しですと理論値で半年かかることがわかり、何とか移行時間を縮められないかなと考えている中、マルチタスクでプログラミングしてみたらどうかな?と思ったのが始まりです。 C言語の経験は大学で習った程度(なんとなくポインタが分かる程度)ですが、具体的な方法など教えていただければと思ってます。 また、ほかにもっとこっちのほうがいいとかありましたらご教授ください。

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

  • ベストアンサー
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

マルチスレッドにすること自体はすごく単純です。 バッチファイルを別データで複数走らせるだけです。 ご自分でマルチスレッドにしなくてもOSがやってくれます。 勿論、今回のケースでは意味が無いでしょうけど。 そもそもデータ変換はプログラムの時点でマルチスレッドが 必要とされる処理ではありません。 それからポインタが分かるくらいでマルチスレッドのプログ ラミングは敷居が高すぎて、説明も困難と思います。 もっと言えば、WindowsでしたらVisual C/C++などで作られる プログラムは元々マルチスレッドです。 これはWindowやマウス/キーボードなどの管理がマルチスレッド 処理を要求するためです。 何度も書きますがデータ変換ではマルチスレッドプログラミングの 要件にはならないでしょう。

aseton19772626
質問者

お礼

ありがとうございます。 計算もしなおして、方法も模索しなおしてみます。

その他の回答 (3)

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.4

失礼、マルチタスクでしたね。 言葉が違いますが、マルチスレッドと同じことです。

aseton19772626
質問者

お礼

まだまだ勉強が必要ってことですね

  • g_liar
  • ベストアンサー率52% (382/728)
回答No.2

たかが数十万件でなんで半年もかかるのか不思議です。 コンピュータやOSに何を使っているか書かれていませんので一般論になりますが…。 いくらマルチタスク化してもコンピュータの性能が上がるわけではありません。 データ移行プログラムが非常に多くのウエイトをしながらゆっくり処理していてCPU使用率が低いのなら、マルチ化したらCPUを有効に使え、早く終わることになりますが・・・ データ移行プログラムは普通はそんな作り方はしないと思います。 1本のプログラムが1つのCPUを100%使っていた場合、マルチ化して2本にすると1本あたりは50%しか使わなくなり(実際はタスク切り替えが走るので50%未満になる)シングルで処理した場合と同等以下のスピードにしかなりません。 もしもプログラムを実行するコンピュータが、複数個のCPUやマルチコアのCPUを搭載している場合なら「マルチスレッド化」すれば早くなります。 ただ、まずは、たかが数十万件で半年もかかるプログラムの見直しをされてみては? どこで時間がかかっているか特定できますか? 冗長な処理はないでしょうか?

aseton19772626
質問者

お礼

マルチスレッドにするにはどうしたらいいのでしょうか

  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.1

>工夫無しですと理論値で半年かかることがわかり   マルチタスクにしても「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日間)」となり、誤った時間予測をしてしまいます。   どう考えても「予測計算を間違っている」ので「計算に含めない、オーバーヘッド時間を除いて再計算」してみる事をお勧めします。

aseton19772626
質問者

お礼

おっしゃる通り計算間違いでした

関連するQ&A

  • 信号処理とプログラミング

    信号処理とプログラミング こんにちは、私は大学3年生です。電気電子学科に所属しています。 通信の分野に興味があり、MATLABによる信号処理を学ぼうと思っています。 ただ、MATLABって別にプログラミング言語じゃないんですよね? 1,2年の頃は電気回路や電気磁気学といった理論の授業ばかりで、筆記さえできれば、プログラミング能力は必要とされていませんでした。 なので、言語についてはC言語しか知らず、ポインタって星印がつくやつでしょ程度の理解です。 仮にも通信分野に進もうとしている人間がプログラミング能力がこんなものでいいのかと不安に感じてきました。 なのでMATLABを学ぶと共にプログラミング言語もやろうとは思うのですが、フィルター処理や伝達関数や信号処理ってプログラミング言語でできるんですかね? もしやるとしたらC言語とJAVAのどっちがいいんですか? プログラミング言語で具体的にどんなことができるかよくわからないので質問しました。回答お願いします。

  • プログラミングの考え方が出来ません

    大学でC言語を習っていて、今も実験などでC言語のプログラミングをしなければならないのですが、なかなか思うようにプログラムが書けません。 いつも何回も友達や教授に聞かないと納得が出来ないし、とても時間がかかるので困っています。 情報系の学科なのでこれからも使うことになるだろうし、自分としてももっとプログラミングが出来るようになりたいと思っているのですが、良い勉強法などあれば教えてください。 今までちゃんとやったことのある言語はC言語のみで、大学では1年半C言語の授業がありました。 自分でプログラミングをしていて困ってしまうのは、主に条件分岐が複雑になってしまうときと、文字列の操作(ポインタ?)です。 今、3年後期なので4年次に研究室に配属されるまでにもっと出来るようになりたいのでよろしくお願いしますm(__)m

  • プログラミング言語 rubyを用いて、

    プログラミング言語 rubyを用いて、 画像処理プログラミングを書こうとしていますが、以下の点が分かりません。 1・メモリの動的確保はどうするの?(C言語でいうmalloc) 2・ファイルから配列に展開するにはどうしたらいいの? 以上が分かればわかるきがするのですが・・ 当方 C言語での画像処理プログラミングはそれなりに経験があるのですが rubyで実現できるのかわからなくて・・

    • ベストアンサー
    • Ruby
  • プログラミングを始めるにあたって

    プログラミングを始めたいと思っています ですが種類が豊富で自分にはどの言語が適しているのかさっぱり解りません 目的も無くただプログラミングを始めたいという理由で始めた方、どういった理由で自分が利用している言語を選びましたか? 私みたいなのは汎用性がある物を選べば無難かと思うのですが、どれが汎用性があるのかもさっぱりです 候補にしている言語はC/C++とJAVAが良いかな?と思っています その場合CとC++は別に考えた方が良いのでしょうか? C++をやる場合でも基礎としてCをやった方が良いのでしょうか? 自分が使用しているパソコンはWindowsとMacです Macでシェルスクリプトを別に覚えたいとも思っています、この場合C言語を覚えた方が移行しやすいのでしょうか? Cocoaは汎用性が無いのと書籍や参考サイトが少なく覚えられるか不安なので現段階では候補からは外しています みなさんが選んだ理由と初心者にも進められる言語を紹介ください よろしくお願いします

  • 本格的にCプログラミングができるようになるまで

    大学生です。大学ではまだ授業がありませんので、独学でC言語のプログラミングを勉強しています。C言語の文法を一通り理解し、ポインタに関しても1冊読んで理解しました(つもりです)。 C言語を教えている先生に個人的に、今後何を勉強すべきか聞いたところ、「いろんなアルゴリズムとかデータ構造を覚えるといい」と言ってくださいました。しかし、私には難しい事項ばかりで、「これらを勉強する意味は何なのか?」という疑問もあります。 また、オープンソースになっているプログラムを見ると、私のレベルを遥かに超えたものばかりで、読んでもさっぱりです。さらに、GUIツールキットの使い方なんかはもちろん、ライブラリの使い方や作り方、ソースを複数ファイルに分割する方法すら知らないことに気づきました(恥ずかしい限りです)。 独学を始めた頃は、「C言語をマスターすればソフトが作れるようになるんだろう」程度の認識でした。しかしここに来て、あまりにも多くの事項を学ばねばならない気がしてきました。「演習あるのみ」と仰る方もいますが、何を演習すればいいのかも分かりません。 一人前にプログラムが書けるようになるまでには、何をしなければならないのでしょうか。目的や理由も添えていただけると嬉しいです。

  • 効率的なプログラミング

    データ処理や数値計算のために簡単なプログラミングをしている者です。大体,一般的な入門書レベルの内容をマスターしている程度と考えていただければ良いと思います。 それで,プログラミングで重要なことは「より単純に,より速く」というコードを書くことが1つあげられると考えていますが,そういったより効率的なプログラミングをするために良い参考書などないでしょうか? 例えば,「こういうコードの書き方は良くないですよ」とか「このように記述することによってより高速に動きますよ」といったような,初心者がはまりやすい罠とか,より上達するために良い書籍ということです。 こういったことは,原則としてどの言語でも共通なことであると認識していますが,全く分からない言語の説明を受けても理解できないので,PerlかCかVBのいずれかの言語でお願いします。 あと,頼みついでに1つ教えて欲しいのですが,同じ繰り返し処理を行う場合,(例えばCでいうところの)for構文とwhile構文の使い分けというのがイマイチよく分かりません(それぞれのメリットとデメリットが分からないということ)。基本的にはどちらでも同じことができますが,私はほとんどfor構文しか使わないのです。

  • 最低限習得しなければいけないプログラミング言語

    僕は今C言語を勉強していますが、C言語はどの程度扱えるようになれればいいのでしょうか。 あと、他のプログラミング言語の中で習得しておかなければいけないものと、どの程度扱えればいいのか教えて下さい。お願いします。

  • プログラミングについてです。

    プログラミングについてです。 A学科 佐藤さん、鈴木さん・・・ B学科 木村さん、佐藤さん・・・ ・ ・ ・ というデータがあります。 そこから、苗字を入力し その苗字の人がいる学科名を全て表示させるためには どうすれば良いのか教えて下さい。 言語はC言語かVBAでお願いいたします。

  • exeファイルを作成できるプログラミング言語

    私は最近プログラミングを始めたばかりで、 まだCとC++とアセンブリを少し知ってる程度です。 この3つのプログラミング言語ではexeファイルを作成できるのは 知ってるのですが、他のプログラミング言語でもexeファイルなどの 実行形式ファイルを作成できるのでしょうか?

  • モーションキャプチャのプログラミングについて

    モーションキャプチャのプログラミングについてお聞きしたいことがあります。 予めAが歩くデータ、Bが歩くデータ、Cが歩くデータの3つを用意しておき、 再度歩く動作のモーションキャプチャを行った際に【これはBのデータ】【これはAのデータ】といった感じで誰の動きであるかを判別できるようなプログラムを教えてもらえないでしょうか。 出来ればJavaかC言語のものを希望しています。 どなたかプログラミングの心得のある方、よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう