The Heartbeat of Node.js: Unpacking the Event Loop