15

私がこれまでに理解しているように、Javascript はシングル スレッドです。一部のプロシージャの実行を延期する場合は、次にスレッドが解放されたときに実行されるようにスケジュール (キューに入れる) だけです。しかし、Async.js は 2 つのメソッドを定義しAsync::parallel & Async::parallelLimitています: と引用します:

  • parallel(タスク、[コールバック])

前の関数が完了するまで待たずに、一連の関数を並列に実行します。関数のいずれかがそのコールバックにエラーを渡すと...

  • parallelLimit(タスク、制限、[コールバック])

並列と同じように、タスクのみが並列に実行され、いつでも最大数の「制限」タスクが実行されます。

私の英語の理解では、「タスクを並行して行う」とは、それらを同時に、つまり同時に行うことを意味します。

Async.js は単一のスレッドでタスクを並列に実行するにはどうすればよいですか? 私は何かが欠けていますか?

4

5 に答える 5

4

Async.Parallel は、ここで十分に文書化されています: https://github.com/caolan/async#parallel

Async.Parallel は、コードの並列実行ではなく、並列で I/O タスクを開始することに関するものです。タスクがタイマーを使用せず、I/O を実行しない場合、それらは実際には連続して実行されます。各タスクの同期セットアップ セクションは、次々に発生します。JavaScript はシングルスレッドのままです。

于 2015-08-10T18:21:33.960 に答える
2

関数は同時に実行されませんが、最初の関数が非同期タスク (setTimeout、network など) に渡されると、最初の関数が提供されたコールバックを呼び出していなくても、2 番目の関数が開始されます。

並列タスクの数については、何を選択するかによって異なります。

于 2013-09-26T09:49:35.670 に答える
1

私の英語の理解では、「タスクを並行して行う」とは、それらを同時に、つまり同時に行うことを意味します。

正しい。また、「同時に」とは、「2 つ以上のタスクが既に開始されているが、まだ終了していない瞬間が少なくとも 1 回ある」ことを意味します。

Async.js は単一のスレッドでタスクを並列に実行するにはどうすればよいですか? 私は何かが欠けていますか?

なんらかの理由 (IO など) でタスクが停止すると、async.js は別のタスクを実行し、最初のタスクを後で続行します。

于 2013-09-27T07:06:23.270 に答える