рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рдХреЙрд▓рдмреИрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ редnextTick ()

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ Node.js рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдХреБрдЫ рд╣рдж рддрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реБрдП, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдИ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рд╣реЛрддреЗ рд╣реИрдВред рдХреЙрд▓рдмреИрдХред рдЧрд▓рддрдлрд╣рдореА рднреА рдЕрдХреНрд╕рд░ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИред рдореИрдВ Node.js рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдЖрдкрдХреЛ рдХрд┐рди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрдХ рд░реВрдкрд░реЗрдЦрд╛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред







рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░: Node.js рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЪрдХреНрд░





рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, Node.js рдПрдХ рдШрдЯрдирд╛ рд▓реВрдк рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬреЛ рдХрд┐ рдкрд░рд┐рд╡рд╛рдж рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдореЛрдбрд╝ рдкрд░, рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд▓реВрдк рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реВрдк рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ редnextTick ()ред рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдорд░ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд▓рд┐рдмреЗрд╡ рдЗрд╡реЗрдВрдЯреНрд╕ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЖрддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХрдо рд╕реЗ рдХрдо, libeio рдХреЛ I / O рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЙрд▓рдмреИрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд▓реВрдк рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ редnextTick (), рд╡рд╣рд╛рдБ рдПрдХ рднреА рдЯрд╛рдЗрдорд░ рдирд╣реАрдВ рд╣реИ рдФрд░ libev рдФрд░ libeio рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реИ, рдлрд┐рд░ рдиреЛрдб рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╕реНрддреБрддрд┐ www.slideshare.net/jacekbecela/introduction-to-nodejs рдкрд░ рдЬрд╛рдПрдВ ред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рддрд░реНрдХ рд╣реИ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрдо рд▓рд╛рдЧрдд рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЪрдХреНрд░ рдмрд╣реБрдд рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдбрд┐рд╕реНрдХ рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдкрдврд╝реЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИрд╢ рд░рд╛рд╢рд┐ рджреЗрддрд╛ рд╣реИред



рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдХрд╛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг





// readFileSync.js var http = require('http'), fs = require('fs'); function func1(str) { var res = ''; for (var i = 0, l = str.length; i < l; i++) { res += str.charCodeAt(i); } return res; } function func2(str) { var res = 0; for (var i = 0, l = str.length; i < l; i++) { res += Math.sin(str.charCodeAt(i)); } return '' + res; } http.createServer(function (req, res) { // Very simple and dangerous check var filename = req.url.replace(/\?.*/, '').replace(/(\.\.|\/)/, ''); // Read file from disk try { var filecontent = fs.readFileSync(filename, 'utf8'); } catch (e) { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('File ' + filename + ' doesn\'t exist'); return; } // Calculate checksum var hash = func2(func1(filecontent)); // Write response res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(hash); }).listen(8124, "127.0.0.1");
      
      







рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рд░реНрд╡рд░ рдореЗрдВ рдбрд┐рд╕реНрдХ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реАрдбрд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд░реАрдбрд┐рдВрдЧ рдкреВрд░реА рд╣реЛрдиреЗ рддрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд░реАрдбрд┐рдВрдЧ T рд░реАрдб рд╕реЗрдХрдВрдб рд▓реЗрддрд╛ рд╣реИ рдФрд░ T calc рд╕реЗрдХрдВрдб рдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рдЕрд╡рд░реБрджреНрдз рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1 / (T read + T calc ) рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдХрдо рд╕реЗрд╡рд╛ рдХрд░ рдкрд╛рдПрдЧрд╛ред рд╣рдо рдЕрдзрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдлрд╛рдЗрд▓ рд░реАрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛





  // readFile.js var http = require('http'), fs = require('fs'); function func1(str) { var res = ''; for (var i = 0, l = str.length; i < l; i++) { res += str.charCodeAt(i); } return res; } function func2(str) { var res = 0; for (var i = 0, l = str.length; i < l; i++) { res += Math.sin(str.charCodeAt(i)); } return '' + res; } http.createServer(function (req, res) { // Very simple and dangerous check var filename = req.url.replace(/\?.*/, '').replace(/(\.\.|\/)/, ''); // Read file from disk fs.readFile(filename, 'utf8', function (err, filecontent) { if (err) { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('File ' + filename + ' doesn\'t exist'); return; } // Calculate checksum var hash = func2(func1(filecontent)); // Write response res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(hash); }); }).listen(8124, "127.0.0.1");
      
      







> рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдлрд╝рд╛рдЗрд▓ рджреВрд╕рд░реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкрдврд╝реА рдЬрд╛рдПрдЧреАред <рд╣рдбрд╝рддрд╛рд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдиреНрдпреВрдирддрдо рд╣реЛрдЧрд╛ (рдЯреА рд░реАрдб , рдЯреА рдХреИрд▓реНрдХ ), рдФрд░ рдирд╣реАрдВ (рдЯреА рд░реАрдб + рдЯреА рдХреИрд▓реНрдХ ), рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рджреЛ рдЕрдиреБрд░реЛрдз рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЗрд╕ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреА рд╕реЗрд╡рд╛ рдХрд╛ рд╕рдордп T read1 + T calc1 + T read2 + T calc2 рд╣реЛрдЧрд╛ , рдФрд░ рдЬрдм рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдпрд╣ T read1 + T read2 + min (T calc1 , T calc2 ) рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред



рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдордп рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдХрдИ рдЕрдиреНрдп рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдордп рдкрд░ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд▓рдЧрднрдЧ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдХрдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЗрд╕реНрдЯреЗрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ func1 () рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЪрдХреНрд░ рдХреЗ рдЕрдЧрд▓реЗ рдореЛрдбрд╝ рдкрд░, func2 () рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдВред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП func1 () рдФрд░ func2 () рдХреА рдЧрдгрдирд╛ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ, рдПрдХ рдирдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдкрдврд╝реА рдЧрдИ рдПрдХ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреАред



рдлрд┐рд░, Node.js рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реАрдПрдо рдореЗрдВ рднрд╛рд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИ)? рдЪреВрдВрдХрд┐ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ I / O рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдХреЙрд▓рдмреИрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЙрд▓ рдХреЗ рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рдЕрдВрддрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред



  // readFile-and-sync-chain.js var http = require('http'), fs = require('fs'); function func1(str) { var res = ''; for (var i = 0, l = str.length; i < l; i++) { res += str.charCodeAt(i); } return res; } function func2(str) { var res = 0; for (var i = 0, l = str.length; i < l; i++) { res += Math.sin(str.charCodeAt(i)); } return '' + res; } function func1_cb(str, cb) { var res = func1(str); cb(res); } function func2_cb(str, cb) { var res = func2(str); cb(res); } http.createServer(function (req, res) { // Very simple and dangerous check var filename = req.url.replace(/\?.*/, '').replace(/(\.\.|\/)/, ''); // Read file from disk fs.readFile(filename, 'utf8', function (err, filecontent) { if (err) { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('File ' + filename + ' doesn\'t exist'); return; } // Calculate checksum func1_cb(filecontent, function (str) { func2_cb(str, function (hash) { // Write response res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(hash); }); }); }); }).listen(8124, "127.0.0.1");
      
      







рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ, рдмрд┐рд▓реНрдХреБрд▓, рдирд╣реАрдВред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░рд╛рд╢рд┐ рдЧрдгрдирд╛ рдХреЛрдб рдХреЛ рджреЛ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдХрд╛рд░рдг рд░рд╛рд╢рд┐ рдЧрдгрдирд╛ рд╕рдордп рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рдЬреЛ рдЕрдВрддрддрдГ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЦрд░рд╛рдм рдХрд░реЗрдЧрд╛ред ред



рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдЪрд┐рдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг





рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдореБрдЦреНрдп рд╕реВрддреНрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде func1 () рдХреА рдЧрдгрдирд╛ рдХреЗ рдмрд╛рдж рд░рд╛рд╢рд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдкреБрд░рд╛рдиреЗ рд╕рд┐рджреНрдз рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: setTimeout (fn, 0)ред рдпрджрд┐ рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛, Node.js рдХреЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ редnextTick (fn), рдЬреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд╛рд╕ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдЬреЛ рд╕реЙрдХреЗрдЯ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, readFile-and-sync-chain.js рд╕рд░реНрд╡рд░ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



  // readFile-and-nextTick.js var http = require('http'), fs = require('fs'); function func1(str) { var res = ''; for (var i = 0, l = str.length; i < l; i++) { res += str.charCodeAt(i); } return res; } function func2(str) { var res = 0; for (var i = 0, l = str.length; i < l; i++) { res += Math.sin(str.charCodeAt(i)); } return '' + res; } function func1_cb(str, cb) { var res = func1(str); process.nextTick(function () { cb(res); }); } function func2_cb(str, cb) { var res = func2(str); process.nextTick(function () { cb(res); }); } http.createServer(function (req, res) { // Very simple and dangerous check var filename = req.url.replace(/\?.*/, '').replace(/(\.\.|\/)/, ''); // Read file from disk fs.readFile(filename, 'utf8', function (err, filecontent) { if (err) { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('File ' + filename + ' doesn\'t exist'); return; } // Calculate checksum func1_cb(filecontent, function (str) { func2_cb(str, function (hash) { // Write response res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(hash); }); }); }); }).listen(8124, "127.0.0.1");
      
      







рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╕рд░реНрд╡рд░ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЪрдХреНрд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддреЗ рд╣реИрдВред



рдорд╛рдирд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛





рдЙрдкрд░реЛрдХреНрдд рд╕рднреА, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрд┐рд╕ рдЖрдХрд╛рд░ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреА рдЧреИрд░-рд░реИрдЦрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдкрд░ рдФрд░ рдХрд┐рддрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА, рд╕рд░реНрд╡рд░ рдХреЛ 10% рд╕реЗ рдЕрдзрд┐рдХ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, 128 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рд▓реЗрдХрд░ 1 рдПрдордмреА рдЖрдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИрдВ рдФрд░ рдЕрдкрд╛рдЪреЗ рдмреЗрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛:



 ab2 -n 1000 -c 100 http://127.0.0.1:8124/filename
      
      







рдкрд░рд┐рдгрд╛рдо рд░реЗрдЦрд╛рдВрдХрди рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ:





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝реЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрдм рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд╡реЗ рдПрдлрдПрд╕ рдХреИрд╢ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд░рдгрдмрджреНрдз рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓рдмреИрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдиреЗ рдЫреЛрдЯреЗ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдП рд╣реИрдВред



рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрдиреБрд░реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдмреЗрд╣рддрд░ рдФрд░ рдЦрд░рд╛рдм рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдкрд░ рднреАред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреБрдЫ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореЛрдВ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ I / O рдХреЗ рдЕрдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЬреБрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП libeio рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИред



PS рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП newcomers to forum.nodejs.ru рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ред



All Articles