8

splice配列からアイテムを削除するか、 で削除できることを知っていdeleteます。前者のアプローチでは、同時実行の問題が発生する可能性があります。たとえば、あるスレッドが配列をウォークスルーしているときに、別のスレッドがシフトまたはスプライシングを行った場合などです。が配列で使用されている場合、配列の穴の上を歩くため、deleteこの問題はありません。forEachforEach

ただし、アレイは永遠に成長し続けることはできず、スイープが必要になり、スプライスの場合と同じ問題が発生する可能性があります。ロックが必要なように聞こえますが、Javascript にロック機能があれば面白いと思います。何かご意見は?

4

2 に答える 2

10

あなたの正確な質問について: いいえ、JavaScript はマルチスレッド化されていないため、同時実行の問題は発生しません。webworker を使用しても、データが共有されないため問題はありません (worker はメッセージを渡すことで通信します)。node.js でも、スクリプトはマルチスレッドではありません。を使用しない限り、関数の実行中に並列実行が何かを行う方法はありませんawait

を使用するだけspliceで、配列をロックする必要はありません。

awaitより一般的な並行性の問題に関しては、 を使用するとすぐに、実行がチャンクに分割され、待機中に別の関数が実行される可能性があることに注意する必要があります。spliceカットされることはありませんが、関数内にいるときは、共有データに対するアルゴリズムのロジックに注意してくださいasync

于 2013-05-04T16:32:14.327 に答える
1

Javascript はシングルスレッドなので問題ありません。

于 2013-05-04T16:32:59.763 に答える