Last active
August 29, 2015 14:07
-
-
Save metamatt/2465dfd76213a98e22e0 to your computer and use it in GitHub Desktop.
Demo of the call stacks you get from console.trace for a few scenarios involving node-fibers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var Fiber = require('fibers'); | |
var Future = require('fibers/future'); | |
function test() { | |
console.trace('trace from root non-fiber'); | |
// Create fiber explicitly, the low-level way. | |
var f1 = Fiber(function fiber1() { | |
console.trace('trace from inside fiber 1 before yield'); | |
Fiber.yield(); | |
console.trace('trace from inside fiber 1 after yield'); | |
}); | |
f1.run(); | |
// That runs till first Fiber.yield call, then lands here | |
console.trace('trace from root non-fiber'); | |
f1.run(); // run it again till it exits | |
console.trace('trace from root non-fiber'); | |
// Create fiber via FiberFuture (patched onto Function.prototype). | |
var fiberFutureCtor = function fiber2() { | |
console.trace('trace from inside fiber 2'); | |
}.future(); | |
// Invoking the future causes it to do Fiber.run deferred via nextTick. | |
var fiberFuture = fiberFutureCtor(); | |
console.trace('trace from root non-fiber before fiber 2 starts'); | |
fiberFuture.resolve(function resolver() { | |
console.trace('trace from fiber 2 resolver while exiting'); | |
process.nextTick(function getOutOfFiber() { | |
console.trace('trace from root non-fiber after fiber 2 exited'); | |
}); | |
}); | |
} | |
// Invoke test via nextTick via setTimeout, to keep node's startup | |
// code (Module.runMain, Module.load, etc) out of the stack traces. | |
// This shouldn't affect the actual behavior; it's just easier to | |
// read the less cluttered stack traces, and is also more like the | |
// steady state of a real app that runs for more than 0 ticks before | |
// doing work. | |
setTimeout(function() { | |
process.nextTick(test); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
magi@ubuntu ~> node fiberStacks.js | |
Trace: trace from root non-fiber | |
at test (/home/magi/src/demeterr/experiments/fiberStacks.js:8:12) | |
at process._tickCallback (node.js:415:13) | |
Trace: trace from inside fiber 1 before yield | |
at fiber1 (/home/magi/src/demeterr/experiments/fiberStacks.js:11:15) | |
Trace: trace from root non-fiber | |
at test (/home/magi/src/demeterr/experiments/fiberStacks.js:17:12) | |
at process._tickCallback (node.js:415:13) | |
Trace: trace from inside fiber 1 after yield | |
at fiber1 (/home/magi/src/demeterr/experiments/fiberStacks.js:13:15) | |
Trace: trace from root non-fiber | |
at test (/home/magi/src/demeterr/experiments/fiberStacks.js:19:12) | |
at process._tickCallback (node.js:415:13) | |
Trace: trace from root non-fiber before fiber 2 starts | |
at test (/home/magi/src/demeterr/experiments/fiberStacks.js:27:12) | |
at process._tickCallback (node.js:415:13) | |
Trace: trace from inside fiber 2 | |
at fiber2 (/home/magi/src/demeterr/experiments/fiberStacks.js:23:15) | |
at /home/magi/src/demeterr/experiments/node_modules/fibers/future.js:344:21 | |
Trace: trace from fiber 2 resolver while exiting | |
at Array.resolver [as 0] (/home/magi/src/demeterr/experiments/fiberStacks.js:29:15) | |
at FiberFuture.Future.return (/home/magi/src/demeterr/experiments/node_modules/fibers/future.js:168:13) | |
at /home/magi/src/demeterr/experiments/node_modules/fibers/future.js:344:17 | |
Trace: trace from root non-fiber after fiber 2 exited | |
at getOutOfFiber (/home/magi/src/demeterr/experiments/fiberStacks.js:31:18) | |
at process._tickCallback (node.js:415:13) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment