AnimationのCore.asyncと10,000プロセス - このシナリオでは、実際の利点は何ですか?
-
21-12-2019 - |
質問
私たちが知っているように - core.async
まだ私は簡単なループと同様の機能を複製することができます。あなたはデモここを見ることができます。
function animationLoop() {
for (var i =0;i<100;i++) {
for (var j= 0; j<100;j++) {
//decision to animate or hold off
var decisionRange = randomInt(0,10);
if (decisionRange < 1) {
var cell = document.getElementById('cell-' + i + j);
cell.innerHTML = randomInt(0,9);
cell.setAttribute('class','group' + randomInt(0,5));
}
}
}
}
.
解決
デモの目的は、Core.asyncとClojurecriptの並行性を実現することを実証することです。大きな勝利は、それらをコールバックに分割するか、手でインターリーブを管理する必要なしに、またはチャネル上のブロッキングの錯覚(タイムアウトチャネルを含む。ブロッキングによって、go
によって制御することで、照明を照らすことで)他の同時go
sへ。もちろん並列性はまだありませんが、これは完全直交概念 1 です。 GUIアプリのスレッドを使用することは、マルチコアCPUが一般的になった前に長い間便利なテクニックです。
結果のコードは、更新率と更新生成率のようなものをすぐに明らかにします。更新生成for
sはすべて同じことを行うが、完全に異なることを実行するために複数のsetTimeout
を起動するので、一般的なものが等しく表現されるため、おそらくCliriに閉じることができます。
1 例並列処理/=並行性 Simon Marloweまたは並列処理は、並行性ではなく、Robert Harperが拡張するこの点。
他のヒント
JavaScriptがシングルスレッドで、 "実際の実行/操作"という点でcore.asyncを使用する場合は、多くの利点がありませんが、ループベースのコードがCore.Asyncコードと比較された場合すべてのCPUコアを利用するランタイム環境(JVMのような)では、非同期コードのパフォーマンス上の利点があります。
それで、基本的に、Core.asyncを使用して書いたことを書いた純粋なalgorithmic code
(DOMなどの実際の環境機能のない)を持っている場合は、ブラウザまたはバックエンドのマルチコアCPUで簡単に同じコードを簡単に実行できます。そして、すべてのCPUコアを使用します。これは、コードの「Dyonooth Semantics」と「運用上のセマンティクス」を分離する範囲でいくらかです。