Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Otrishko <shishugi@gmail.com>2020-06-04 20:58:52 +0300
committerJames M Snell <jasnell@gmail.com>2020-07-03 23:24:39 +0300
commitb4fe76d656d51ead949f2a35c13a221616f78c4c (patch)
treeef41c9d189a3a3e452954b91201e1cdd69e426b1 /doc/api/async_hooks.md
parentee3243fe3f29f317e910a2424eabd279dec2eb00 (diff)
doc: improve async_hooks asynchronous context example
* use writeFile(1) everywhere to log * prettify execution id graph * add clearer explanation for TickObject presence * add causation graph via triggerAsyncId PR-URL: https://github.com/nodejs/node/pull/33730 Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de> Reviewed-By: Andrey Pechkurov <apechkurov@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Vladimir de Turckheim <vlad2t@hotmail.com>
Diffstat (limited to 'doc/api/async_hooks.md')
-rw-r--r--doc/api/async_hooks.md37
1 files changed, 28 insertions, 9 deletions
diff --git a/doc/api/async_hooks.md b/doc/api/async_hooks.md
index 2ba002dcbc4..f980b237b11 100644
--- a/doc/api/async_hooks.md
+++ b/doc/api/async_hooks.md
@@ -331,20 +331,17 @@ async_hooks.createHook({
},
before(asyncId) {
const indentStr = ' '.repeat(indent);
- fs.writeFileSync('log.out',
- `${indentStr}before: ${asyncId}\n`, { flag: 'a' });
+ fs.writeSync(process.stdout.fd, `${indentStr}before: ${asyncId}\n`);
indent += 2;
},
after(asyncId) {
indent -= 2;
const indentStr = ' '.repeat(indent);
- fs.writeFileSync('log.out',
- `${indentStr}after: ${asyncId}\n`, { flag: 'a' });
+ fs.writeSync(process.stdout.fd, `${indentStr}after: ${asyncId}\n`);
},
destroy(asyncId) {
const indentStr = ' '.repeat(indent);
- fs.writeFileSync('log.out',
- `${indentStr}destroy: ${asyncId}\n`, { flag: 'a' });
+ fs.writeSync(process.stdout.fd, `${indentStr}destroy: ${asyncId}\n`);
},
}).enable();
@@ -380,16 +377,38 @@ the value of the current execution context; which is delineated by calls to
Only using `execution` to graph resource allocation results in the following:
```console
-Timeout(7) -> TickObject(6) -> root(1)
+ root(1)
+ ^
+ |
+TickObject(6)
+ ^
+ |
+ Timeout(7)
```
The `TCPSERVERWRAP` is not part of this graph, even though it was the reason for
`console.log()` being called. This is because binding to a port without a host
name is a *synchronous* operation, but to maintain a completely asynchronous
-API the user's callback is placed in a `process.nextTick()`.
+API the user's callback is placed in a `process.nextTick()`. Which is why
+`TickObject` is present in the output and is a 'parent' for `.listen()`
+callback.
The graph only shows *when* a resource was created, not *why*, so to track
-the *why* use `triggerAsyncId`.
+the *why* use `triggerAsyncId`. Which can be represented with the following
+graph:
+
+```console
+ bootstrap(1)
+ |
+ ˅
+TCPSERVERWRAP(5)
+ |
+ ˅
+ TickObject(6)
+ |
+ ˅
+ Timeout(7)
+```
##### `before(asyncId)`