読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

非同期処理の実装についてその①。 〜マルチスレッドだかマルチプロセスだかについて調べてみた〜

開発とかその他

仕事でプログラミングしてたらですね、ちょっと非同期処理が必要になりまして。

メールを大量に送る必要があったのですが、時間がかかって困っていました。

一時的な対応として、送信対象者を2つに分けて、
それぞれに対しプログラムを2つ実行させていたのですが
これを一つのプログラム内で処理させるようにしたかったのです。


あれでしょ、マルチスレッドだかプロセスだかでやったら
プログラム2つ動かすのと一緒でしょ?
とぼんやり考えながら実装していました。


そもそもスレッド?プロセス?

まあwikipediaさんでも読んでもらうとして…
スレッド (コンピュータ) - Wikipedia

あと古い記事で.netの話ですが共通する話だと思うので…
連載.NETマルチスレッド・プログラミング入門:第1回 マルチスレッドはこんなときに使う (1/2) - @IT



個人的には、

プログラムを立ち上げると一つの「プロセス」が立ち上がる。
マルチスレッドというのは、そのプロセスの中で処理を複数立ち上げる(分割する?)。
なのでメモリ空間を共有している。

マルチプロセスにするというのは、全く別のプログラムを立ち上げるようなものだから
メモリ空間を共有しない。

と捉えているのですが。


メリットについて


例えば、

インプット → DB更新 → アウトプット

みたいな処理の中で、DB更新が遅くてアウトプット開始が遅い!
なんて場合に、

インプット → DB更新
      → アウトプット

みたいにスレッド(もしくはプロセス)を分けて処理をすることで、
DB更新完了を待たずにアウトプットを実行させることができると。


こういう場合はわかる。


今回の場合


ただ今回(メール配信)の処理の場合、分けた2つの処理は全く同じ事をしている。
cpuを半分こして、送信対象を半分づつ処理するのであれば、
cpuをフルに使って全件送るのと同じなのではないのか??

…ただ実際処理を分けたことでかなり時間短縮されてるんですよね…


で、考えたんですけど
もしかして、cpuのコア数が複数でも
スレッド(プロセス)が一つだと基本一つのコアしか使わないんですかね??
(違う?)

もしスレッド(プロセス)を分けることで、処理するコアが別々になるのであれば
早くなるのも頷けるのですが。。



実装編へ続く…(;´Д`)