• 締切済み

JavaScriptの非同期処理について。

頭の悪い質問かもしれません。 ””非同期処理とは、あるタスクを一時的にスレッドから切り離すことで、後続の処理の進行を止めることなく別のタスクを実行できる処理方式のことである。””https://qiita.com/komaitaira/items/54b5c9f3d54695974704 と書いてあるのですが。 スレッドから切り離されたタスクっていうのは、例えばどこで何をしてるのですか? 例えば、ファイルの読み書きを非同期処理で実行した場合。 ファイルの読み込みはスレッドから切り離されるということだと思うのですが、スレッドから切り離されたら、「ファイルの読み込み」という動作はどこで行われているのですか? よろしくお願いします。

みんなの回答

回答No.1

スレッドを「人間」と解釈すれば わかりやすいかもです。 あなた一人が、 仕事を10個やっていたとする。 当然、1つの仕事をやってる間ほかの作業ができません。 そこに、別の従業員が来ました。 なので、貴方が、「この作業をお願いします!」と仕事を 与えた。これが、スレッドの切り離し。 仕事を別に与えられた別の従業員が生まれた新しいスレッドです。 ですので、 >ファイルの読み込みはスレッドから切り離されるということだと思うのですが、スレッドから切り離されたら、「ファイルの読み込み」という動作はどこで行われているのですか? この答えはもうわかったと思いますが、 メインスレッドから切り離されて(つまりあなた自身) 新しく生まれたサブスレッド(その従業員)が 「ファイルの読み込み」という仕事を受け持ったという 解釈をすればよいかと。 で、例えばその「ファイルの読み込み」が終わらないとできない仕事 と、終わらなくてもできる仕事があると思います。 終わらないとできないので、待ってます=これが同期。 終わらなくてもそのまま業務を続けていくのが=非同期。 って感じで理解すると、なんとなく、わかりやすいかと で、 「ファイルの読み込み」が終わらなくてもできる作業は さらに別の人にやらせることもできるので、 また、さらにサブスレッド(つまりさらに別の従業員)に やって!とやらせておくこともできるというわけです。 そうすることで、1つの時間に、同時に複数の作業を 行うことで、トータルの完了時間を短縮させましょ! って感じで、仕事のルールとほぼ同じですよ。

p8o
質問者

補足

ご回答ありがとうございます。 大変参考になりました。 ご面倒ついでにもうひとつ質問よろしいでしょうか。 例えばPromise.allなどの使うというのは、サブスレッド(従業員)が複数作られ(ほぼ)同時に作業させる→並列処理。 というイメージでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A