我正试图排列工人,所以我写了这段代码。
for(var c=0;c<core;c++){
let worker = new Worker("Html/Worker.js");
worker.postMessage({core:core,W:width,H:height,id:c,px:px,py:py,pz:pz,yaw:yaw,pitch:pitch,D:D,fov:fov});
worker.onmessage=(e)=>{
let gap = this.sH/core*e.data[2];
this.frameBuffer.set(e.data[0],Math.floor(gap)*this.sW*4);
//alert(e.data);
this.depthBuffer.set(e.data[1],Math.floor(gap)*this.sW);
}
this.threads.push(worker);
}
我想知道它是否能够在不进行多次初始化的情况下复制worker(如下面的代码)
let worker = new Worker("Html/Worker.js");
for(var c=0;c<core;c++){
worker.postMessage({core:core,W:width,H:height,id:c,px:px,py:py,pz:pz,yaw:yaw,pitch:pitch,D:D,fov:fov});
worker.onmessage=(e)=>{
let gap = this.sH/core*e.data[2];
this.frameBuffer.set(e.data[0],Math.floor(gap)*this.sW*4);
this.depthBuffer.set(e.data[1],Math.floor(gap)*this.sW);
}
this.threads.push(worker);
}
array.push是否会引起深度复制?
答案 0 :(得分:0)
否,Array.push
不会引起深度复制。
this.threads.push(worker)
不会修改您传递给它的worker
,而只会将其原样添加到数组this.threads
中。
这意味着在您的第二个示例中,只有一个工作人员会收到core
条消息,并且只有一个消息侦听器。
请注意,在两个示例中,您都不应该在c
回调中访问onmessage
,因为在接收消息c
时,它等于core
。
如果需要在回调中使用它,请使用let c
而不是var c
进行声明,以在创建回调时访问该值(explanation)