-
Notifications
You must be signed in to change notification settings - Fork 100
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Worker pool? #31
Comments
This could probably be adapted (and simplified) to suit: FWIW, it's best to only invoke greenlet once per function - generally at definition time. Dynamically creating workers to do single tasks will always have a nontrivial performance overhead. |
Just going to clarify for folks finding this issue - Greenlet does re-use the worker thread for all calls, but only if you hoist the greenlet() definition so it's being called one time for the given async function: // BAD: this creates a new worker every time getPage() is called:
export function getPage(url) {
const getJson = greenlet(async url => {
return await (await fetch(url)).json();
});
return getJson(url);
} // GOOD: this uses the same worker for each call to getPage():
const getJson = greenlet(async url => {
return await (await fetch(url)).json();
});
export function getPage(url) {
return getJson(url);
} |
hey @developit, I wanted to offload some functions to a worker and I was thinking if this 👇 solution is good enough? (the alternative is using those postMessage thingies by hand, which I hate): let dispatch = greenlet(async (action) => {
switch (action.type) {
case 'fetchGH': {
let url = `https://api.github.com/users/${action.username}`
let res = await fetch(url)
let profile = await res.json()
return profile.name
}
case 'sayHi': {
return "Hi " + action.name
}
default: {
throw new Error(`Unknown action ${action.type}`)
}
}
}) |
@developit I love workerize(-loader)! But it didn't play well with Next.js, so I ended up using So, I guess, if anyone is trying to bundle workers in Next.js, use that combo, it works perfectly. Otherwise, stick to greenlet and/or workerize. (you should probably mark the last 3 comments as off-topic :) ) |
Oh I didn't mean the loader - there is a non-loader version of workerize that uses the same internals as Greenlet, works at runtime. |
I needed to import the AWS SDK, that's why it wasn't an option :( PS. If anyone needs to bundle web workers in Next.js, use Parcel (microbundle had a babel-related error) to build your workers to the Otherwise use greenlet/workerize. |
Creating a new worker for every invocation can be rather slow when dispatching small tasks. How about adding a pool of workers?
The text was updated successfully, but these errors were encountered: