const width=512
const height=512
img = ctx.createImageData(width,height)
//data = a 2D array that I'm trying to map to img
function data_to_rgb(h,w,data,img){
//modify the img object at h,w with data at h,w
//return nothing
}
function draw_loop(){
//some code that acts on data
for(let w=0;w<width;++w){
for(let h=0;h<height;++h){
data_to_rgb(w,h,data,img)
}
}
ctx.putImageData(img,0,0)
}
Как преобразовать этот фрагмент кода, чтобы начать выполнение data_to_rgb
параллельно, дождаться, пока все они завершатся sh, а затем выполнить ctx.putImageData(img,0,0)
? Я сам разбирался, как это сделать, но пока все примеры, показывающие, как это сделать, продолжают использовать функции, не имеющие аргументов, тогда как у меня было 4.
Я попробовал приведенный ниже код, но производительность упала. примерно до ~ 1/10. Я потратил слишком много часов, пытаясь решить эту проблему самостоятельно.
const width=512
const height=512
img = ctx.createImageData(width,height)
//data = a 2D array that I'm trying to map to img
async function data_to_rgb(h,w,data,img){ //MADE THIS ONE ASYNC
//modify the img object at h,w with data at h,w
//return nothing
}
async function draw_loop(){ //MADE THIS ONE ASYNC
//some code that acts on data
let tasks = [] //DEFINED THIS TASKS LIST
for(let w=0;w<width;++w){
for(let h=0;h<height;++h){
tasks.push(data_to_rgb(w,h,data,img)) //PUSHED IT INTO THE TASKS LIST
}
}
await Promise.all(tasks) //ADDED THIS AWAIT
ctx.putImageData(img,0,0)
}
Я неправильно использую asyn c? (Может быть, его следует ... больше использовать для вещей, связанных с сетью)
Моя попытка решить эту проблему самостоятельно даже делает то, что я хочу?
Вот фактический код
Вот код с асинхронным c в действии
Вот код без asyn c в действии