Jen tak ze zvědavosti jsem si v rychle napsal impelmentaci vlastního HTTP serveru v čístém NodeJS (core http modul), pak v NodeJS pomocí ExpressJS frameworku, čístém Golangu a nakonec v Python 3.
V žádném z nich jsem nevyužil žédné možnosti jakkoliv paralelizovat, a proto ve všech serverech se jednoalo i single thread server. Viz následující zdrojáky:
NodeJS
ExpressJS
Golang
Python 3
A výsledek testu?
Tušíl jsem, že Go bude nejrychlejší, a také bylo. I když ne o moc.
Potěšilo mě, že ExpressJS se v podstatě držel stejných výsledků jako čistý NodeJS, protože když si uvědomím co vše mi ExpressJS nabízí a měl bych jej ručně psát, tak to se mi opravdu nechce.
Dalšim plusovým bodem pro ExpressJS je to, že to jak těsně se držel NodeJS mi bere performance důvod dívat se po nějaké jiné knihovně, protože žádná nebude o moc rychlejší.
To že bude Python nejpomalejší jsem čekal. Opět jsem využíval přímo interního balíčku, který se nicméně dá nahradit za multithread a nebo dokonce za jiné, externí implementace. Těm se budu věnovat později a zvlášť. Nicméně tohle opravdu není doména Pythonu a vůbec mu to nemám za zlé.
Concurency | NodeJS | ExpressJS | GO | Python |
1 | 6755 | 6299 | 6722 | 4175 |
2 | 11035 | 10460 | 10529 | 5919 |
10 | 13695 | 12579 | 16214 | 5924 |
20 | 13596 | 12881 | 16965 | 5826 |
40 | 13420 | 13094 | 16656 | 0 |
100 | 13340 | 12091 | 16252 | 0 |
200 | 12734 | 11137 | 16250 | 0 |
400 | 11512 | 11871 | 14152 | 0 |
Všechna měření jsou jen povrchni, průměroval jsem jen z několika pokusů, nicméně výsledky budou plus mínus sedět…
Co dál?
V příštím testu chci paralelizovat. V rámci NodeJS postavím server na clusteru v Go využiju goroutiny.