mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
doc: clarify synchronous blocking of Worker stdio
Fixes: https://github.com/nodejs/node/issues/25630 Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: https://github.com/nodejs/node/pull/38658 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
This commit is contained in:
@@ -1193,6 +1193,45 @@ active handle in the event system. If the worker is already `unref()`ed calling
|
||||
|
||||
## Notes
|
||||
|
||||
### Synchronous blocking of stdio
|
||||
|
||||
`Worker`s utilize message passing via {MessagePort} to implement interactions
|
||||
with `stdio`. This means that `stdio` output originating from a `Worker` can
|
||||
get blocked by synchronous code on the receiving end that is blocking the
|
||||
Node.js event loop.
|
||||
|
||||
```mjs
|
||||
import {
|
||||
Worker,
|
||||
isMainThread,
|
||||
} from 'worker_threads';
|
||||
|
||||
if (isMainThread) {
|
||||
new Worker(new URL(import.meta.url));
|
||||
for (let n = 0; n < 1e10; n++) {}
|
||||
} else {
|
||||
// This output will be blocked by the for loop in the main thread.
|
||||
console.log('foo');
|
||||
}
|
||||
```
|
||||
|
||||
```cjs
|
||||
'use strict';
|
||||
|
||||
const {
|
||||
Worker,
|
||||
isMainThread,
|
||||
} = require('worker_threads');
|
||||
|
||||
if (isMainThread) {
|
||||
new Worker(__filename);
|
||||
for (let n = 0; n < 1e10; n++) {}
|
||||
} else {
|
||||
// This output will be blocked by the for loop in the main thread.
|
||||
console.log('foo');
|
||||
}
|
||||
```
|
||||
|
||||
### Launching worker threads from preload scripts
|
||||
|
||||
Take care when launching worker threads from preload scripts (scripts loaded
|
||||
|
||||
Reference in New Issue
Block a user