0
votes

As i understand Nodejs has a event loop based mechanism, therefore the main nodejs code is single threaded which just tries to execute the methods and callbacks present in the call stack, therefore at a single point of time in the nodejs runtime only one thread executes(main thread), so if i define a data structure like a queue or map i need not to worry about locking it or blocking others accessing it when one of the callbacks is using because

  1. unless a callback is done executing the main thread will keep executing ( unlike multithreaded application where a thread could execute for a bit and then contexted switched out to give chance to some other thread.)
  2. no 2 callbacks are executed in parallel

Example:

let arr = [];

const fun = async (website) => {
    const result = await fetch(website, {}, "POST");
    arr.push(...result); }

const getData = async () => {
    let promises = [];
    for (let i = 0; i < 10; i++) {
        promises.push(fun(`website${i}`));
    }
    Promise.all(promises);

}

So my question is do i ever need to lock a resource on the nodejs side of thing,

i do understand the libuv is multithreaded therefore when calling async operations that use libuv (ex writing to file) could cause problems if i don't lock.

But my question is do i ever need a lock in the nodejs runtime.