在javascript中是否允许在主线程中等待

在javascript中是否允许在主线程中等待,javascript,blocking,web-worker,cyclicbarrier,Javascript,Blocking,Web Worker,Cyclicbarrier,我目前正在与Web工作人员一起工作,出于某些测试目的,如果可以在主线程中等待工作人员完成他们正在做的事情,那就太好了。因此: 主线程->启动工作线程 主线程->等待工作人员完成 工人->做一些工作 工人们完成了 主线程->做一些事情 我意识到最正确的方法是在主线程中使用回调,每当工作线程完成时就会调用回调,但由于实际原因,这种方法不起作用。我在Java中创建了类似于CyclicBarrier的程序,但是每当我在主线程中调用barrier.enter()时,我当然会得到一个错误。因此,我想知道的是

我目前正在与Web工作人员一起工作,出于某些测试目的,如果可以在主线程中等待工作人员完成他们正在做的事情,那就太好了。因此:

主线程->启动工作线程

主线程->等待工作人员完成

工人->做一些工作

工人们完成了

主线程->做一些事情

我意识到最正确的方法是在主线程中使用回调,每当工作线程完成时就会调用回调,但由于实际原因,这种方法不起作用。我在Java中创建了类似于CyclicBarrier的程序,但是每当我在主线程中调用barrier.enter()时,我当然会得到一个错误。因此,我想知道的是,是否有任何设置或类似的设置,我可以设置,暂时允许我阻止主线程。我正在使用Node btw运行我的程序


这纯粹是为了测试,我当然不会在生产环境中使用它

如果你坚持不使用events,你将自己置于一个棘手的境地。如果阻塞主线程,则无法处理工作线程发送的事件。工作线程和主线程之间没有其他通信通道


还是有?您可以创建一个HTTP服务器,将所有数据从工作线程中继到主线程。主线程无法在该服务器上运行。同步AJAX请求确实会阻塞主线程,但不会占用CPU。

如果您坚持不使用事件,您将陷入一个棘手的境地。如果阻塞主线程,则无法处理工作线程发送的事件。工作线程和主线程之间没有其他通信通道


还是有?您可以创建一个HTTP服务器,将所有数据从工作线程中继到主线程。主线程无法在该服务器上运行。同步AJAX请求会阻塞主线程,但不会占用CPU。

AFAIK暂停JS的唯一方法是
警报
确认
提示
和不推荐的
showModalDialog
。或者
while(true)
,但这会冻结浏览器并浪费CPU。是的,我尝试过这些,但它们在我的情况下不起作用。我需要一个能让我阻止的东西。简短回答:不,我已经用javascript编写了做这类事情的代码,你基本上需要保留一个数组,所有的“工作人员”都可以将自己标记为“完成”,每个人显然都初始化为“未完成”。当每个工作人员标记自己时,您就有一段代码来检查每个人是否都完成了,如果完成了,则执行继续操作(下一段代码是在您的“等待所有人完成”代码之后)。再说一次,我做过这件事,从来没有遇到过问题。是的,但我似乎无法让它与我正在使用的qunit一起工作…我没有尝试过这一点,但可能可以使用由ServiceWorker管理的同步XHR请求有效地阻止主线程,它可以与您的其他网络工作者异步通信以同步内容。AFAIK暂停JS的唯一方法是
警报
确认
提示
和不推荐的
showModalDialog
。或者
while(true)
,但这会冻结浏览器并浪费CPU。是的,我尝试过这些,但它们在我的情况下不起作用。我需要一个能让我阻止的东西。简短回答:不,我已经用javascript编写了做这类事情的代码,你基本上需要保留一个数组,所有的“工作人员”都可以将自己标记为“完成”,每个人显然都初始化为“未完成”。当每个工作人员标记自己时,您就有一段代码来检查每个人是否都完成了,如果完成了,则执行继续操作(下一段代码是在您的“等待所有人完成”代码之后)。再说一次,我做过这件事,从来没有遇到过问题。是的,但我似乎无法让它与我正在使用的qunit一起工作…我没有尝试过这一点,但可能可以使用由ServiceWorker管理的同步XHR请求有效地阻止主线程,它可以与您的其他网络工作者异步通信以同步事情。是的,我想这是一个选项,尽管有点复杂。我意识到阻止主线程将无法接收事件,但我阻止它的方式是使用在firefox中每晚使用sharedmemory实现的cyclicbarrier。因此,每当所有工作线程都到达代码中的某个点时,主线程将解锁,甚至不接收事件!因此,如果主线程可能被阻塞,它应该仍然可以工作。但正如你所说,这似乎是不可能的。是的,我想这是一个选择,尽管有点复杂。我意识到阻止主线程将无法接收事件,但我阻止它的方式是使用在firefox中每晚使用sharedmemory实现的cyclicbarrier。因此,每当所有工作线程都到达代码中的某个点时,主线程将解锁,甚至不接收事件!因此,如果主线程可能被阻塞,它应该仍然可以工作。但正如你所说,这似乎是不可能的。