我需要在我的代码中使用一个串行队列。我发现了一个由@jessetane制作的queue implementation,它被大量的项目使用。有人知道将并发参数设置为1是否会使队列串行和同步吗?谢谢
jvlzgdj91#
将concurrency参数设置为1实际上会使队列串行化和同步化。这将使它成为串行的,因为第一个作业需要在第二个作业开始之前先完成。但是它不会使它同步--这是一件好事。例如,如果将并发性设置为1,则和将执行以下命令:
q.push(function (cb) { setTimeout(function () { console.log('slow job finished') cb() }, 200) }) q.push(function (cb) { console.log('simple') cb(); })
...则可以确保输出将具有以下顺序:
slow job finished simple
这是 serial 的特性,但它不是同步的。如果您需要多一个输出语句,如下所示:
q.push(function (cb) { setTimeout(function () { console.log('slow job finished') cb() }, 200) }) q.push(function (cb) { console.log('simple') cb(); }) console.log('hello')
...则输出将具有:
hello slow job finished simple
这表明作业是异步执行的,即在清空当前调用堆栈之后执行。
tzcvj98z2#
我想您误解了为什么将此队列设置为异步的使队列异步的目的是让您可以等待新项目添加到队列中,同时JavaScript(通常使用单个线程)可以自由地执行其他操作,而不仅仅是等待项目出现在队列中
2条答案
按热度按时间jvlzgdj91#
将concurrency参数设置为1实际上会使队列串行化和同步化。
这将使它成为串行的,因为第一个作业需要在第二个作业开始之前先完成。
但是它不会使它同步--这是一件好事。
例如,如果将并发性设置为1,则和将执行以下命令:
...则可以确保输出将具有以下顺序:
这是 serial 的特性,但它不是同步的。如果您需要多一个输出语句,如下所示:
...则输出将具有:
这表明作业是异步执行的,即在清空当前调用堆栈之后执行。
tzcvj98z2#
我想您误解了为什么将此队列设置为异步的
使队列异步的目的是让您可以等待新项目添加到队列中,同时JavaScript(通常使用单个线程)可以自由地执行其他操作,而不仅仅是等待项目出现在队列中