Difference between Javascript async functions and Web workers?

后端 未结 6 1497
南笙
南笙 2021-02-05 06:53

Threading-wise, what\'s the difference between web workers and functions declared as

async function xxx()
{
}

?

I am aware web worker

6条回答
  •  醉梦人生
    2021-02-05 07:27

    Workers are also accessed by asynchronous code (i.e. Promises) however Workers are a solution to the CPU intensive tasks which would block the thread that the JS code is being run on; even if this CPU intensive function is invoked asynchronously.

    So if you have a CPU intensive function like renderThread(duration) and if you do like

    new Promise((v,x) => setTimeout(_ => (renderThread(500), v(1)),0)
        .then(v => console.log(v);
    new Promise((v,x) => setTimeout(_ => (renderThread(100), v(2)),0)
        .then(v => console.log(v);
    

    Even if second one takes less time to complete it will only be invoked after the first one releases the CPU thread. So we will get first 1 and then 2 on console.

    However had these two function been run on separate Workers, then the outcome we expect would be 2 and 1 as then they could run concurrently and the second one finishes and returns a message earlier.

    So for basic IO operations standard single threaded asynchronous code is very efficient and the need for Workers arises from need of using tasks which are CPU intensive and can be segmented (assigned to multiple Workers at once) such as FFT and whatnot.

提交回复
热议问题