{"id":270554,"date":"2015-12-17T12:59:03","date_gmt":"2015-12-17T09:59:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=270554"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=270554","title":{"rendered":"\u041a\u0430\u043a \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f?"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/cfc\/193\/a51\/cfc193a5171e494a9eb32230201204b2.jpg\"\/><\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0437\u0430\u0434\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u041f\u043e\u0447\u0442\u044b Mail.Ru \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u2014 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430\/\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u0427\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c?  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c;<\/li>\n<li>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f;<\/li>\n<li>\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b;<\/li>\n<li>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439;<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435;<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 IDE;<\/li>\n<li>\u041f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a.<\/li>\n<\/ul>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u0430. \u041b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0442\u0430\u043a \u0436\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u0430\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u0438\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0432\u044b\u0445 \u0433\u0438\u0440\u044c \u043d\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043f\u0435\u0445\u0430 \u043c\u0430\u0440\u0430\u0444\u043e\u043d\u0446\u0430.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h1>\n<p>  <\/p>\n<h3>\u041f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442\u044b<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u0442\u0430\u0441\u043a\u0438 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0440\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0447\u0442\u044b, \u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, <a href=\"http:\/\/nodejs.org\">Node.js<\/a> \u0441 \u0435\u0435 \u0440\u043e\u0434\u043d\u044b\u043c JavaScript \u0438 <a href=\"https:\/\/developers.google.com\/v8\">V8<\/a> \u043e\u0442 Google.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u044b\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0430:<a href=\"http:\/\/www.scala-lang.org\/\"> Scala<\/a>, <a href=\"https:\/\/golang.org\/\">Go<\/a> \u0438 <a href=\"https:\/\/www.rust-lang.org\/\">Rust<\/a>.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 HTTP-\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 HTML \u0438 \u043e\u0442\u0434\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0443. \u0422\u0430\u043a\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0447\u0442\u044b \u2014 \u0432\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 V8 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430 <a href=\"https:\/\/github.com\/mailru\/fest\">fest<\/a>.<\/p>\n<p>  \u041f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2014 \u0432\u0441\u0435 \u0443\u043f\u0438\u0440\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c V8. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u0430 \u043b\u0438\u0448\u043d\u0435\u0439 \u2014 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043e\u0446\u0435\u043d\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0432\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f. \u041f\u0435\u0440\u0432\u044b\u0439 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c\u0443 URL:  <\/p>\n<pre><code class=\"html\">GET \/ HTTP\/1.1 Host: service.host  HTTP\/1.1 200 OK  Hello World! <\/code><\/pre>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u2014 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e \u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u043f\u0443\u0442\u0438 URL:  <\/p>\n<pre><code class=\"html\">GET \/greeting\/user HTTP\/1.1 Host: service.host  HTTP\/1.1 200 OK  Hello, user <\/code><\/pre>\n<p>  <\/p>\n<h3>\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 VirtualBox.<\/p>\n<p>  \u0425\u043e\u0441\u0442, MacBook Pro:  <\/p>\n<ul>\n<li>2,6 GHz Intel Core i5 (dual core);<\/li>\n<li>CPU Cache L1: 32 KB, L2: 256 KB, L3: 3 MB;<\/li>\n<li>8 GB 1600 MHz DDR3.<\/li>\n<\/ul>\n<p>  VM:  <\/p>\n<ul>\n<li>4 GB RAM;<\/li>\n<li>VT-x\/AMD-v, PAE\/NX, KVM.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435:  <\/p>\n<ul>\n<li>CentOS 6.7 64bit;<\/li>\n<li>Go 1.5.1;<\/li>\n<li>Rustc 1.4.0;<\/li>\n<li>Scala 2.11.7, sbt 0.13.9;<\/li>\n<li>Java 1.8.0_65;<\/li>\n<li>Node 5.1.1;<\/li>\n<li>Node 0.12.7; <\/li>\n<li>nginx 1.8.0;<\/li>\n<li>wrk 4.0.0.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043d\u0430 Rust \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f <a href=\"http:\/\/hyper.rs\">hyper<\/a>, \u043d\u0430 Scala \u2014 <a href=\"http:\/\/spray.io\">spray<\/a>. \u0412 Go \u0438 Node.js \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b\/\u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<h1>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/h1>\n<p>  \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432:  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/wg\/wrk\">wrk<\/a>;<\/li>\n<li><a href=\"https:\/\/httpd.apache.org\/docs\/2.2\/programs\/ab.html\">ab<\/a>;<\/li>\n<li><a href=\"http:\/\/jmeter.apache.org\/\">JMeter<\/a>;<\/li>\n<li><a href=\"https:\/\/github.com\/rakyll\/boom\">boom<\/a>.<\/li>\n<\/ul>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 wrk \u0438 ab.<\/p>\n<h1>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h1>\n<p>  <\/p>\n<h3>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>  <b>wrk<\/b><\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u044f\u0442\u0438\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430, \u0441 1000 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0438 50 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438:<br \/>  <code> wrk -d300s -c1000 -t50 --timeout 2s http:\/\/service.host <\/code>  <\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Average Latency, ms<\/th>\n<th>Request, #\/sec<\/th>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>104,83<\/td>\n<td>36 191,37<\/td>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>0,02906<\/td>\n<td>32 564,13<\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>57,74<\/td>\n<td>17 182,40<\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>69,37<\/td>\n<td>14 005,12<\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>86,68<\/td>\n<td>11 125,37<\/td>\n<\/tr>\n<\/table>\n<p>  <code> wrk -d300s -c1000 -t50 --timeout 2s http:\/\/service.host\/greeting\/hello <\/code>  <\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Average Latency, ms<\/th>\n<th>Request, #\/sec<\/th>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>105,62<\/td>\n<td>33 196,64<\/td>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>0,03207<\/td>\n<td>29 623,02<\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>55,8<\/td>\n<td>17 531,83<\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>71,29<\/td>\n<td>13 620,48<\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>90,29<\/td>\n<td>10 681,11<\/td>\n<\/tr>\n<\/table>\n<p>  \u0421\u0442\u043e\u043b\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0435, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435\u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 Average Latency \u0443 Rust \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0431 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 hyper. \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 -c \u0432 wrk \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 wrk \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0440\u0435\u0434\u0435 \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c, \u0442. \u0435. keep-alive \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439. Hyper \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 keep-alive \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u2014 <a href=\"https:\/\/github.com\/hyperium\/hyper\/issues\/368\">\u0440\u0430\u0437<\/a>, <a href=\"https:\/\/github.com\/hyperium\/hyper\/issues\/601\">\u0434\u0432\u0430<\/a>.<\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 Lua-\u0441\u043a\u0440\u0438\u043f\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u0442\u0440\u0435\u0434\u0430\u043c, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c wrk, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0442\u0440\u0435\u0434.<\/p>\n<p>  \u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f Rust \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u0432\u043e\u0442 \u043a <a href=\"https:\/\/github.com\/hyperium\/hyper\/issues\/395\">\u0447\u0435\u043c\u0443<\/a>. <\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u0441\u0442 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u043c, \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0442\u0435\u0441\u0442, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043f\u0435\u0440\u0435\u0434 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c nginx, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 wrk \u0438 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441:  <\/p>\n<pre><code class=\"html\">upstream u_go {     server 127.0.0.1:4002;     keepalive 1000; }  server {         listen 80;         server_name go;         access_log off;          tcp_nopush on;         tcp_nodelay on;          keepalive_timeout 300;         keepalive_requests 10000;          gzip off;         gzip_vary off;          location \/ {                 proxy_pass http:\/\/u_go;         } } <\/code><\/pre>\n<p>  <code> wrk -d300s -c1000 -t50 --timeout 2s http:\/\/nginx.host\/service <\/code>  <\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Average Latency, ms<\/th>\n<th>Request, #\/sec<\/th>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>155,36<\/td>\n<td>9 196,32<\/td>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>145,24<\/td>\n<td>7 333,06<\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>233,69<\/td>\n<td>2 513,95<\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>207,82<\/td>\n<td>2 422,44<\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>209,5<\/td>\n<td>2 410,54<\/td>\n<\/tr>\n<\/table>\n<p>  <code> wrk -d300s -c1000 -t50 --timeout 2s http:\/\/nginx.host\/service\/greeting\/hello <\/code>  <\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Average Latency, ms<\/th>\n<th>Request, #\/sec<\/th>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>154,95<\/td>\n<td>9 039,73<\/td>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>147,87<\/td>\n<td>7 427,47<\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>199,17<\/td>\n<td>2 470,53<\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>177,34<\/td>\n<td>2 363,39<\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>262,19<\/td>\n<td>2 218,22<\/td>\n<\/tr>\n<\/table>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, overhead \u0441 nginx \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u0435\u043d, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0440\u0430\u0432\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 nginx.<\/p>\n<p>  <b>ab<\/b><\/p>\n<p>  \u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u043e\u0442 Apache ab, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 wrk, \u043d\u0435 \u0434\u0435\u0440\u0436\u0438\u0442 keep-alive \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 nginx \u043d\u0430\u043c \u0442\u0443\u0442 \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c 50 000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0437\u0430 10 \u0441\u0435\u043a\u0443\u043d\u0434, \u0441 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438.<br \/>  <code> ab -n50000 -c256 -t10 http:\/\/service.host\/ <\/code>  <\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Completed requests, #<\/th>\n<th>Time per request, ms<\/th>\n<th>Request, #\/sec<\/th>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>50 000,00<\/td>\n<td>22,04<\/td>\n<td>11 616,03<\/td>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>32 730,00<\/td>\n<td>78,22<\/td>\n<td>3 272,98<\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>30 069,00<\/td>\n<td>85,14<\/td>\n<td>3 006,82<\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>27 103,00<\/td>\n<td>94,46<\/td>\n<td>2 710,22<\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>16 691,00<\/td>\n<td>153,74<\/td>\n<td>1 665,17<\/td>\n<\/tr>\n<\/table>\n<p>  <code> ab -n50000 -c256 -t10 http:\/\/service.host\/greeting\/hello <\/code>  <\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Completed requests, #<\/th>\n<th>Time per request, ms<\/th>\n<th>Request, #\/sec<\/th>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>50 000,00<\/td>\n<td>21,88<\/td>\n<td>11 697,82<\/td>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>49 878,00<\/td>\n<td>51,42<\/td>\n<td>4 978,66<\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>30 333,00<\/td>\n<td>84,40<\/td>\n<td>3 033,29<\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>27 610,00<\/td>\n<td>92,72<\/td>\n<td>2 760,99<\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>27 178,00<\/td>\n<td>94,34<\/td>\n<td>2 713,59<\/td>\n<\/tr>\n<\/table>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f Scala-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0435\u043d \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u043f\u0440\u043e\u0433\u0440\u0435\u0432\u00bb \u0438\u0437-\u0437\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 JVM, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0431\u0435\u0437 nginx hyper \u0432 Rust \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u043b\u043e\u0445\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 keep-alive \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0410 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439, \u043a\u0442\u043e \u0443\u0441\u043f\u0435\u043b \u0437\u0430 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 50 000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0431\u044b\u043b Go.<\/p>\n<h1>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/h1>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Node.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var cluster = require('cluster'); var numCPUs = require('os').cpus().length; var http = require(&quot;http&quot;); var debug = require(&quot;debug&quot;)(&quot;lite&quot;); var workers = []; var server;  cluster.on('fork', function(worker) {     workers.push(worker);      worker.on('online', function() {         debug(&quot;worker %d is online!&quot;, worker.process.pid);     });      worker.on('exit', function(code, signal) {         debug(&quot;worker %d died&quot;, worker.process.pid);     });      worker.on('error', function(err) {         debug(&quot;worker %d error: %s&quot;, worker.process.pid, err);     });      worker.on('disconnect', function() {         workers.splice(workers.indexOf(worker), 1);         debug(&quot;worker %d disconnected&quot;, worker.process.pid);     }); });  if (cluster.isMaster) {     debug(&quot;Starting pure node.js cluster&quot;);      ['SIGINT', 'SIGTERM'].forEach(function(signal) {         process.on(signal, function() {             debug(&quot;master got signal %s&quot;, signal);             process.exit(1);         });     });      for (var i = 0; i &lt; numCPUs; i++) {         cluster.fork();     } } else {     server = http.createServer();      server.on('listening', function() {         debug(&quot;Listening %o&quot;, server._connectionKey);     });      var greetingRe = new RegExp(&quot;^\\\/greeting\\\/([a-z]+)$&quot;, &quot;i&quot;);     server.on('request', function(req, res) {         var match;          switch (req.url) {             case &quot;\/&quot;: {                 res.statusCode = 200;                 res.statusMessage = 'OK';                 res.write(&quot;Hello World!&quot;);                 break;             }              default: {                 match = greetingRe.exec(req.url);                 res.statusCode = 200;                 res.statusMessage = 'OK';                 res.write(&quot;Hello, &quot; + match[1]);                 }         }          res.end();     });      server.listen(8080, &quot;127.0.0.1&quot;); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Go<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"go\">package main  import (     &quot;fmt&quot;     &quot;net\/http&quot;     &quot;regexp&quot; )  func main() {     reg := regexp.MustCompile(&quot;^\/greeting\/([a-z]+)$&quot;)     http.ListenAndServe(&quot;:8080&quot;, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {         switch r.URL.Path {         case &quot;\/&quot;:             fmt.Fprint(w, &quot;Hello World!&quot;)         default:             fmt.Fprintf(w, &quot;Hello, %s&quot;, reg.FindStringSubmatch(r.URL.Path)[1])         }     })) } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Rust<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"rust\">extern crate hyper; extern crate regex;  use std::io::Write; use regex::{Regex, Captures};  use hyper::Server; use hyper::server::{Request, Response}; use hyper::net::Fresh; use hyper::uri::RequestUri::{AbsolutePath};  fn handler(req: Request, res: Response&lt;Fresh&gt;) {     let greeting_re = Regex::new(r&quot;^\/greeting\/([a-z]+)$&quot;).unwrap();      match req.uri {         AbsolutePath(ref path) =&gt; match (&req.method, &path[..]) {             (&hyper::Get, &quot;\/&quot;) =&gt; {                 hello(&req, res);             },             _ =&gt; {                 greet(&req, res, greeting_re.captures(path).unwrap());             }         },         _ =&gt; {             not_found(&req, res);         }     }; }  fn hello(_: &Request, res: Response&lt;Fresh&gt;) {     let mut r = res.start().unwrap();     r.write_all(b&quot;Hello World!&quot;).unwrap();     r.end().unwrap(); }  fn greet(_: &Request, res: Response&lt;Fresh&gt;, cap: Captures) {     let mut r = res.start().unwrap();     r.write_all(format!(&quot;Hello, {}&quot;, cap.at(1).unwrap()).as_bytes()).unwrap();     r.end().unwrap(); }  fn not_found(_: &Request, mut res: Response&lt;Fresh&gt;) {     *res.status_mut() = hyper::NotFound;     let mut r = res.start().unwrap();     r.write_all(b&quot;Not Found\\n&quot;).unwrap(); }  fn main() {     let _ = Server::http(&quot;127.0.0.1:8080&quot;).unwrap().handle(handler); } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Scala<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"scala\">package lite  import akka.actor.{ActorSystem, Props} import akka.io.IO import spray.can.Http import akka.pattern.ask import akka.util.Timeout import scala.concurrent.duration._ import akka.actor.Actor import spray.routing._ import spray.http._ import MediaTypes._ import org.json4s.JsonAST._  object Boot extends App {   implicit val system = ActorSystem(&quot;on-spray-can&quot;)   val service = system.actorOf(Props[LiteActor], &quot;demo-service&quot;)   implicit val timeout = Timeout(5.seconds)   IO(Http) ? Http.Bind(service, interface = &quot;localhost&quot;, port = 8080) }  class LiteActor extends Actor with LiteService {   def actorRefFactory = context   def receive = runRoute(route) }  trait LiteService extends HttpService {   val route =     path(&quot;greeting&quot; \/ Segment) { user =&gt;       get {         respondWithMediaType(`text\/html`) {           complete(&quot;Hello, &quot; + user)         }       }     } ~     path(&quot;&quot;) {       get {         respondWithMediaType(`text\/html`) {           complete(&quot;Hello World!&quot;)         }       }     } } <\/code><\/pre>\n<\/div>\n<\/div>\n<h1>\u041e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0443\u0441\u043f\u0435\u0445\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0412\u0441\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u0435\u0431\u0430\u0433\u0430 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442.<\/p>\n<table>\n<tr>\n<th>Label<\/th>\n<th>Performance Rate<sup>0<\/sup><\/th>\n<th>Community size<sup>1<\/sup><\/th>\n<th>Packages count<\/th>\n<th>IDE Support<\/th>\n<th>Developers<sup>5<\/sup><\/th>\n<\/tr>\n<tr>\n<td>Go<\/td>\n<td>100,00%<\/td>\n<td><a href=\"http:\/\/stackoverflow.com\/search?q=go\">12 759<\/a><\/td>\n<td>104 383<sup>2<\/sup><\/td>\n<td><a href=\"https:\/\/github.com\/golang\/go\/wiki\/IDEsAndTextEditorPlugins\">+<\/a><\/td>\n<td><a href=\"http:\/\/hh.ru\/search\/resume?text=go%2C+golang&amp;logic=any&amp;pos=full_text&amp;exp_period=all_time&amp;order_by=relevance&amp;specialization=1.221&amp;area=1&amp;clusters=true\">315<\/a><\/td>\n<\/tr>\n<tr>\n<td>Rust<\/td>\n<td>89,23%<\/td>\n<td><a href=\"http:\/\/stackoverflow.com\/search?q=rust\">3 391<\/a><\/td>\n<td>3 582<\/td>\n<td><a href=\"https:\/\/www.rust-lang.org\/ides.html\">+<\/a><sup>4<\/sup><\/td>\n<td><a href=\"http:\/\/hh.ru\/search\/resume?text=rust&amp;logic=any&amp;pos=full_text&amp;exp_period=all_time&amp;order_by=relevance&amp;specialization=1.221&amp;area=1&amp;clusters=true\">21<\/a><\/td>\n<\/tr>\n<tr>\n<td>Scala<\/td>\n<td>52,81%<\/td>\n<td><a href=\"http:\/\/stackoverflow.com\/search?q=scala\">44 844<\/a><\/td>\n<td>172 593<sup>3<\/sup><\/td>\n<td>+<\/td>\n<td><a href=\"http:\/\/hh.ru\/search\/resume?text=scala&amp;logic=any&amp;pos=full_text&amp;exp_period=all_time&amp;order_by=relevance&amp;specialization=1.221&amp;area=1&amp;clusters=true\">407<\/a><\/td>\n<\/tr>\n<tr>\n<td>Node 5.1.1<\/td>\n<td>41,03%<\/td>\n<td><a href=\"http:\/\/stackoverflow.com\/search?q=node.js\">102 328<\/a><\/td>\n<td>215 916<\/td>\n<td>+<\/td>\n<td><a href=\"http:\/\/hh.ru\/search\/resume?text=node.js&amp;logic=any&amp;pos=full_text&amp;exp_period=all_time&amp;order_by=relevance&amp;specialization=1.221&amp;area=1&amp;clusters=true\">654<\/a><\/td>\n<\/tr>\n<tr>\n<td>Node 0.12.7<\/td>\n<td>32,18%<\/td>\n<td><a href=\"http:\/\/stackoverflow.com\/search?q=node.js\">102 328<\/a><\/td>\n<td>215 916<\/td>\n<td>+<\/td>\n<td><a href=\"http:\/\/hh.ru\/search\/resume?text=node.js&amp;logic=any&amp;pos=full_text&amp;exp_period=all_time&amp;order_by=relevance&amp;specialization=1.221&amp;area=1&amp;clusters=true\">654<\/a><\/td>\n<\/tr>\n<\/table>\n<p>  <sup>0<\/sup> \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u044f\u0442\u0438\u043c\u0438\u043d\u0443\u0442\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 wrk \u0431\u0435\u0437 nginx, \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 RPS.<br \/>  <sup>1<\/sup> \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u043e \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0442\u0435\u0433\u043e\u043c \u043d\u0430 <a href=\"http:\/\/stackoverflow.com\/search?q=php\">StackOverflow<\/a>.<br \/>  <sup>2<\/sup> \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 <a href=\"https:\/\/godoc.org\/\">godoc.org<\/a>.<br \/>  <sup>3<\/sup> \u041e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u044f\u0437\u044b\u043a\u0430\u043c Java, Scala \u043d\u0430 <a href=\"https:\/\/github.com\/\">github.com<\/a>.<br \/>  <sup>4<\/sup> \u041f\u043e\u0434 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u0443\u044e Idea \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u0442.<br \/>  <sup>5<\/sup> \u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c <a href=\"http:\/\/hh.ru\/\">hh.ru<\/a>.<\/p>\n<p>  \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 <a href=\"http:\/\/data.stackexchange.com\/stackoverflow\/query\/409175\/posts-with-tag-by-day#graph\">\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u0442\u0435\u0433\u0430\u043c \u0437\u0430 \u0434\u0435\u043d\u044c<\/a>:<\/p>\n<p>  <b>Go<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/512\/d40\/536\/512d405365c143efb9efaaaf39442227.png\"\/><\/p>\n<p>  <b>Rust<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e44\/943\/c48\/e44943c4820546df8e9878f7e8d89672.png\"\/><\/p>\n<p>  <b>Scala<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/cf9\/e49\/bb3\/cf9e49bb38a54d878d130a4ba64443dd.png\"\/><\/p>\n<p>  <b>Node.js<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/3cb\/515\/1d1\/3cb5151d1ac34c7f81e2fe9eba15c984.png\"\/><\/p>\n<p>  <b>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, PHP:<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/93f\/bcc\/66a\/93fbcc66ab8546d8bd449782bc5db7b2.png\"\/><\/p>\n<h1>\u0412\u044b\u0432\u043e\u0434\u044b<\/h1>\n<p>  \u041f\u043e\u043d\u0438\u043c\u0430\u044f, \u0447\u0442\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u0432\u0435\u0449\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u044b\u0431\u043a\u0430\u044f \u0438 \u043d\u0435\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u0430\u044f, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u043b\u043e\u0436\u043d\u043e. \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0432\u0441\u0435 \u0434\u0438\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043d\u044e\u0430\u043d\u0441\u0430\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432 \u0438, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u0432 \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 Go.<\/p>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043e\u0446\u0435\u043d\u043e\u043a \u0431\u044b\u043b\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u043f\u0443\u0449\u0435\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0434\u0430\u0431\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043d\u0430\u0431\u0440\u043e\u0441 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u043b\u0438\u0432\u0430\u0440. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u0442\u0430\u043a\u0438\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c, \u0442\u043e \u043f\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0431\u044b \u043f\u0440\u0435\u0436\u043d\u0438\u043c.<\/p>\n<p>  <img loading=\"lazy\" decoding=\"async\" align=\"right\" width=\"64\" height=\"64\" src=\"https:\/\/habrastorage.org\/files\/ccf\/040\/6f5\/ccf0406f5cf04e49a51a50480f0b561a.png\"\/>               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/273341\/\"> http:\/\/habrahabr.ru\/post\/273341\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/cfc\/193\/a51\/cfc193a5171e494a9eb32230201204b2.jpg\"\/><\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0437\u0430\u0434\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u041f\u043e\u0447\u0442\u044b Mail.Ru \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u2014 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430\/\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u0427\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c?  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c;<\/li>\n<li>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f;<\/li>\n<li>\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b;<\/li>\n<li>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439;<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0440\u044b\u043d\u043a\u0435;<\/li>\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 IDE;<\/li>\n<li>\u041f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a.<\/li>\n<\/ul>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u0430. \u041b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0442\u0430\u043a \u0436\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u0430\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u0438\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0432\u044b\u0445 \u0433\u0438\u0440\u044c \u043d\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043f\u0435\u0445\u0430 \u043c\u0430\u0440\u0430\u0444\u043e\u043d\u0446\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-270554","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=270554"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270554\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=270554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=270554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=270554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}