The `asyncStack` is appended to whenever a new AsyncListener instance has to be loaded (i.e. in the `before` phase). Since this is all happening asynchronously, it's rare that it will get very deep. For example, even something like this won't cause the `asyncStack` to get deeper than 1:
```javascript
process.addAsyncListener({
  create: function() { return Math.random(); },
  before: function() { },
  after: function() { }
});


(function run() {
  process.nextTick(run);
}());
```

Now as for how "deep" do the parents get "traced"? Once you add an AsyncListener to one async event it will append itself indefinitely to every other async event that is spawned from the parent. But because internally I'm not keeping track of that it has little overhead. It's up to the user to actually implement the logic of storing who the parent is. Hence the importance of the storage mechanism.