我知道可以splice
从数组中取出一个项目,也可以使用delete
. 前一种方法可能会导致并发问题,例如,如果一个线程正在遍历数组,而另一个线程刚刚移动或拼接。delete
如果在阵列上使用,则不会出现此问题forEach
,因为forEach
会越过阵列中的孔。
但是,阵列不能永远保持增长,需要清扫,可能会导致与拼接情况相同的问题。听起来我需要锁定,但如果 Javascript 有任何功能,我会很开心。有什么想法吗?
我知道可以splice
从数组中取出一个项目,也可以使用delete
. 前一种方法可能会导致并发问题,例如,如果一个线程正在遍历数组,而另一个线程刚刚移动或拼接。delete
如果在阵列上使用,则不会出现此问题forEach
,因为forEach
会越过阵列中的孔。
但是,阵列不能永远保持增长,需要清扫,可能会导致与拼接情况相同的问题。听起来我需要锁定,但如果 Javascript 有任何功能,我会很开心。有什么想法吗?
关于您的确切问题:不,您不会遇到并发问题,因为 JavaScript 不是多线程的。即使您使用网络工作者,您也不会遇到任何问题,因为没有共享数据(工作者通过传递消息进行通信)。即使在 node.js 中,您的脚本也不是多线程的。除非您使用await
.
所以简单地使用splice
,不需要锁定数组。
关于更一般的并发问题,您应该知道,一旦您使用await
,执行可以被分成块并且在您等待时可以运行另一个函数。splice
永远不会被削减,但当你在一个async
函数中时,要小心你的算法对共享数据的逻辑。
Javascript是单线程的,所以没有问题。