• Atom is a text editor written by GitHub https://github.com/atom/atom • Atom Shell is a desktop application shell based on Chromium and Node.js https://github.com/atom/atom- shell • Atom is built upon Atom Shell Atom Editor and Atom Shell
Chromium Browser Browser Window Window Window … Tray Menu Dialog Controlled by C++ Renderer HTML JavaScript (DOM) Renderer HTML JavaScript (DOM) Renderer HTML JavaScript (DOM) IPC
Atom Shell Browser Window Window Window … Tray Menu Dialog Controlled by Node.js Renderer HTML JavaScript (DOM) Node.js Renderer HTML JavaScript (DOM) Node.js Renderer HTML JavaScript (DOM) Node.js IPC
Node.js in Atom Shell • Atom Shell has embedded Node.js in both Chromium browser’s browser process and renderer process • JavaScript in browser process can do GUI related operations like creating windows and menus. • JavaScript in renderer process can use Node.js APIs in addition to standard DOM.
Event Loop of Node.js timers, idle IO poll deal with IO events uv_check uv_prepare Main Thread process.nextTick produced events setImmediate produced events
Event Loop of Atom Shell Main Thread Windows WaitMessage() New Thread IO poll 提 ⽰示主 线 程 有 Node.js事 件 timers, idle IO poll once deal with IO events uv_check uv_prepare