Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中模拟工作线程?_Javascript_Multithreading - Fatal编程技术网

如何在JavaScript中模拟工作线程?

如何在JavaScript中模拟工作线程?,javascript,multithreading,Javascript,Multithreading,我有一个功能,我必须接收来自不同用户(用一些ID标识)的项目,并按相对顺序处理它们(因此用户a的项目1在用户a的项目2之前处理,但与用户B的项目N相比,对顺序没有限制)。为了提高吞吐量,我希望异步处理它们 我以前使用过多线程语言和并发队列,如果队列中不再有任何内容,线程将在繁忙等待中运行。但我不知道如何用JavaScript的单线程解决这个问题。我在考虑使用承诺和内部无限循环,但我不知道这是否是一种反模式 作为一项限制,我的客户不愿使用未经审计团队批准的外部库,所以我尝试手工操作 谢谢您通常不会

我有一个功能,我必须接收来自不同用户(用一些ID标识)的项目,并按相对顺序处理它们(因此用户a的项目1在用户a的项目2之前处理,但与用户B的项目N相比,对顺序没有限制)。为了提高吞吐量,我希望异步处理它们

我以前使用过多线程语言和并发队列,如果队列中不再有任何内容,线程将在繁忙等待中运行。但我不知道如何用JavaScript的单线程解决这个问题。我在考虑使用承诺和内部无限循环,但我不知道这是否是一种反模式

作为一项限制,我的客户不愿使用未经审计团队批准的外部库,所以我尝试手工操作


谢谢

您通常不会在JavaScript中忙着等待。但是,您可以做的许多事情(向web服务器发送请求、加载图像(与向web服务器发送请求相同、等待用户输入)都会接受回调或返回承诺(另一种形式的回调)

处理异步事物列表非常容易

函数点(thingMsg){
//这只是表示一些异步运行的进程
返回新承诺((解决)=>{
const duration=Math.random()*500+1500;//0.5到2秒
设置超时(()=>{
解决(thingMsg);
},持续时间);
});
}
const userAToDoList=[
“拌面粉”,
"捏",,
“烤”,
“切片”,
];
常量userBToDoList=[
"斩",,
“油炸”,
“炖”,
“联合”,
];
异步函数doListNorder(列表,用户名){
用于(列表中的常量项){
const result=等待点(项目);
log(`${userName}did${result}`);
}
log(`${userName}finished`);
}
Dolistinoder(userAToDoList,'userA');
dolistinoder(userBToDoList,'userB');
JavaScript