Upload
unihack
View
308
Download
2
Embed Size (px)
DESCRIPTION
სტუდენტური ჰაკათონი - cst.unihack.ge პრეზენტაცია იოსებ ძმანაშვილი - Node.JS http://www.youtube.com/watch?v=GO74oM2Fb4o uniHack hack@CST
Citation preview
NODE.JS INTROA Talk By Ioseb Dzmanashvili
@iosebi
Wednesday, December 25, 13
ABOUT ME
Software Architect at AzRy LLC
Assistant Professor at CST
Ph.D Student at Technical University of Georgia
V8 Contributor
Wednesday, December 25, 13
ABOUT NODE.JS
Released in 2009 by Ryan Dahl
Is built on V8 JavaScript Engine
Based on event-driven non-blocking I/O
Platform for fast and scalable network apps
Wednesday, December 25, 13
WHAT MAKES IT AWESOME?
Easy of use
Server side JavaScript
Active community
Repository of awesome modules
npm install [module name]
Wednesday, December 25, 13
SERIOUSLY? IS THAT ALL?
Wednesday, December 25, 13
WELL, NO
Built on V8 JavaScript engine
Node.js never blocks on I/O operations
You do not need to manage threads
No expensive context switching
No memory waste on execution stacks
Wednesday, December 25, 13
V8 ADVANTAGES
Fastest JavaScript runtime
No JIT, it compiles JavaScript into Assembler
Short(really short) garbage collector cycles
Great implementation of EcmaScript 5 and EcmaScript 6
Wednesday, December 25, 13
MAJOR BOTTLENECKS
I/O operations (Disk, RAM, Network)
Threaded concurrency
Wednesday, December 25, 13
I/O LATENCY
I/O CPU Cycles
L1-Cache 3
L2-Cache 14
RAM 250
Hard Disk 41.000.000
Network 240.000.000
Wednesday, December 25, 13
WHAT CONTRIBUTES TO LATENCY?
Wednesday, December 25, 13
TYPICAL CODE EXAMPLE
var query = "SELECT * FROM t";var result = db.query(query);
while(result.hasNext()) { print(result.next());}
db.free(result);
Wednesday, December 25, 13
NON BLOCKING EXAMPLE
var query = "SELECT * FROM t";
db.query(query, function(result) { while(result.hasNext()) { print(result.next()); }});
// do something here
Wednesday, December 25, 13
FILE I/O EXAMPLE
$file = fopen("file.txt", "r");
while(!feof($file)){ $line = fgets($file); // do something with line}
fclose($file);
Wednesday, December 25, 13
ASYNC I/O WITH FILES
function readFile(file) { var br = new BufferedReader(file, ...); br.on("error", function(error) { // handle error }).on("line", function(line) { // do something meaningful with line }).on("end", function() { // we are done }).read();}
readFile("/path/to/file");
Wednesday, December 25, 13
HOW NODE.JS SOLVES I/O PROBLEMS FOR ME?
Wednesday, December 25, 13
SINGLE THREADED
1Wednesday, December 25, 13
EVENT LOOP
SingleThread
Wednesday, December 25, 13
FS I/Ofn3();
PROGRAM EXECUTION FLOW
Program never waits for I/O operations completion
I/O is handled asynchronously
fn0();
fn1();
fn2();
DB I/O
FS I/O
NETWORK I/O
Wednesday, December 25, 13
DISADVANTAGES?
Wednesday, December 25, 13
IT IS JAVASCRIPT
Wednesday, December 25, 13
QUESTIONS?
Wednesday, December 25, 13
THANK YOU
Wednesday, December 25, 13