Benchmark, Requests per second, microsoft c# core wins

Permalänk
Medlem

Benchmark, Requests per second, microsoft c# core wins

Först en liten disclaimer, det betyder inte så mycket med benchmarks eftersom de ofta är extremt anpassade efter syftet. Lika så här har alla tävlande gjort stora anpassningar för att nå målet.

http://web.ageofascent.com/asp-net-core-exeeds-1-15-million-r...

Poängen jag tänkte lyfta var att microsoft core för visso leder stort över tex node.js men också uppmärksamhet till nästa versions open source ramverk från ms, asp.net core som är körbart på windows, linux och ios.

Community edition av visual studio är också gratis men visst, gillar du notepad eller andra verktyg så kan det funka där med om de har lagt till stöd för core, det är open source så fritt fram för alla.

https://www.microsoft.com/net/core#windows
https://www.microsoft.com/net
https://docs.asp.net/en/latest/intro.html

Värt att nämna är att det är version 1, så vissa 3je parts bibliotek är inte lyfta ännu av respektive till att bli körbara på alla plattformar men du kan konfa dina projekt om du vill till att stödja endast windows om du vill. Allt som fanns i .net framework finns inte ännu.
Jag kan nämna dock att på jobbet har jag inga problem med min grupps första asp.net core prjojekt som jag satte upp och som i huvudsak inkluderar bank tjänster, webb och dataaccess inte har något problem. Däremot måste man lära om vissa delar om du sen tidigare arbetade med .net framework, föregångaren till core som inte är plattformsoberoende. Tex så är mvc strukturen omarbetad och din webb hostas inte i IIS, du kan däremot om du vill hosta i IIS men då agerar iis'en proxy, vilket jag gillar för iis'en är bra. Däremot system.web som ni kanske vet, gammalt bibliotek, var riktigt slött med många beroenden biblioteket krävde.

Sen givetvis är det roligt att inleda med en känga, jag vet att det finns så många som bryr sig så enormt om det språk de kodar i och blir upprörda, lite som nvidia vs amd. Själv bryr jag mig inte, det är verktyg för ett ändamål. Däremot tycker jag ms har lyckats bra här och på evil skalan så tycker jag oracle som äger java och google som nyttjar node.js är ondare, men jag kodar allt och rekommenderar alla att testa allt.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare

Prestandajämförelsen man gör är rätt pinsam, det enda den visar med 100 % säkerhet är att personerna har absolut noll koll på tekniken de av någon anledning utsett som huvudkonkurrent.

Som jag förstår det kör man i Azure, Microsoft har normalt sett väldigt kraftiga och moderna Xeon E5 baserade servers. Hur man med dessa lyckas få en simple HTTP-benchmark att endast nå ~150k RPS är faktiskt en bedrift.

Jobbar själv inte alls med webbteknik men gjorde för ett par år sedan egna jämförelser mot bl.a. NodeJS då det var "konkurrent" till den produkt jag jobbade med då. Utan att vara speciellt mycket till NodeJS expert fick mitt program då 400k RPS, det var på Ubuntu server 12.04LTS så en över fyra år gammal NodeJS version. Detta på en dual E5-2690 (d.v.s. Sandy Bridge).

Testade precis samma benchmark på Ubuntu 16.04 och i5-4670T (d.v.s en fyrkärnig CPU med 65 W TDP utan HT), d.v.s. en modern Linux-kärna och en modern NodeJS på en desktop CPU. Fick 470k RPS...

För fyra år sedan var Go rätt omoget och presterade rätt likvärdigt med NodeJS. Men idag är Go en snabbare plattform för den här typen av arbete, så varför jämför man sig inte med den plattformen?

Och skulle säga att Microsoft är idag en större promotor för NodeJS än Google. Skulle säga att Google främst använder Java, Go och Python. Några axplock
https://mva.microsoft.com/en-us/training-courses/building-app...
https://github.com/Azure/azure-sdk-for-node#readme
https://github.com/nodejs/node-chakracore#readme
https://github.com/Azure/azure-sdk-for-node#readme
https://code.visualstudio.com/docs/runtimes/nodejs

Man har väldigt bra stöd för NodeJS både i Visual Studio och i Azure. Dock pushar man mest för detta ihop med TypeScript, kanske inte helt fel för JavaScript är inte precis förstahandsvalet för speciellt många (är själv glad så länge jag slipper jobba med JS, men tänk prestanda från NodeJS med ett språk som Ruby!!!).

Att man skapat .NET core är nog mindre för att vara "snälla" och långt mer för att försöka bromsa det fall man ser i antalet utvecklare som använder .NET.

The chart speaks for itself: a decline in .NET positions over the years. Source: Indeed

I USA har är det nu fler jobb-annonser för C++ och Python folk än .NET.

Dock är Sverige extremt .NET tungt, så här är det absolut värdefullt att ha kunskaper kring den plattformen!

Håller absolut med om Oracle. Vilken katastrof att det företaget ska sitta på den plattform som just nu med råge är störst i IT-industrin. Tycka vad man vill om Java, men själva runtime-plattformen är idag otroligt stabil och presterar lysande på alla stora OS.

Finns ju roligare språk att köra ovanpå plattformen än Java, t.ex. Clojure och Ruby (JRuby, ja gillar Ruby då det i min mening är det enda moderna språk sedan Smalltalk som faktiskt gör OOP till något positivt! Finns dock massor med bra sätt att designa programvara utan att blanda in OOP/OOAD).

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Lite tråkig attityd där. c# core för med sig flera framsteg och förtjänar att belysas. Betydligt bättre prestanda och en nystart av ms till för att ersätta gamla .net framework.

Klart bilden är biased, jag inleder och påpekar sådana faktorer. Kanske mer intressant att du missar att jämföra mot ms egna föregående ramverk för att se där, dock troligen viss bias där med, du kan lätt göra ditt eget test och se om du får liknande prestandaskillnader. 1.15 Million represents a 2300% gain from ASP.NET 4.6.

Ang statistiken,
Vore det inte konstigt om .net inte gick ned då det är mer och mer mobilprogrammering där de flesta inte skriver .net eftersom ms inte lyckats på mobilmarknaden? Själv skriver jag mest till android med googles ramverk för mobiler tex.
Btw, .net framework är också vad core ersätter.

Lite intressantare index
http://www.tiobe.com/tiobe-index/

Ang att Sverige är .net tungt jämfört med andra länder så är kulturen i Sverige annorlunda från usa, vi är mycket snabba på att anamma nyheter. Allt från ny bra teknik till olika maträtter från olika länder och gå vidare från annat. Det kan förklara varför .net är större här än vissa andra länder.

Ang. ms och snälla, de är ett företag och sen de gjorde sig av med Ballmer har de lyckligtvis ställt om till en betydligt bättre väg med tex open source, prestanda, bättre modularisering, middle ware opt-in, osv. Det är väl knappast dåligt!?

När du skriver att du gillar ruby, menar du då ruby eller ruby on rails? Ruby on rails är ett tillägg till ruby och är på nedgång. Det lämpar sig dock fint till mindre appar men, har du lite mer logik eller behöver skalbarhet så är det inte ett lämpligt verktyg vilket är varför många lämnar det, tex twitter. Sen kan nämnas att mvc konceptet kommer från ruby on rails, det har fört med sig bra idéer.

Jag håller med om att Java har många fördelar, rätt snabbt på backend och körbart på många plattformar. Oracle har dock inte skött underhållet så bra däremot. Det finns också stora nackedlar som java sandbox och java applets som är ett stort läckande säkerhetshål.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare

@IceDread: hur är det tråkig attityd att belysa att jämförelsen är ungefär lika relevant att jämföra tiden för 0-100 km/h mellan två bilar men där "konkurrenten" bara kör med 3/4 gaspådrag?

Min gissning här är att det just nu pågår en rätt rejäl dragkamp mellan två grupper inom Microsoft. Det mellan .NET-gruppen och den relativt nya grupp inom Microsoft som jobbar med TypeScript och NodeJS.

Det har ställts en hel del frågor på bl.a. Build-konventen kring om Microsoft fortfarande är 100 % dedikerade till .NET fortfarande. Man pekar på saker som att Anders Hejlsberg ("pappan" till C#) numera jobbar med TypeScript, att IE-teamet lägger krut på att få till en variant av NodeJS baserad på Chakra (senaste JavaScript motorn i IE) samt att man lagt väldigt mycket krut på NodeJS stöd i VisualStudio.

Men självklart är det positivt att man jobbar på att öka prestanda i .NET Core! Få verkar tro att man når speciellt många nya utvecklare med detta, däremot verkar många tro att .NET Core kan minska hastigheten på fallet då det gör det möjligt att köra ASP.NET applikationer på Linux. Linux är totalt dominerade i "molnet", till och med i Azure har Linux runt 30 % andel. Linux är totalt dominerande i Amazon Web Services, IBM Bluemix och Google Cloud Platform.

Att .NET Core absolut var något man måste skapa blir uppenbart när man inser att i princip alla molntjänster tar betalt per använd klockcykel, det är alltså helt kritiskt att ha en effektiv plattform då det har en direkt påverkan på kostnaden att använda programvaran i molnet.

Angående Ruby: personligen använder jag det uteslutande som jag tidigare använde Python, d.v.s. som ett generellt programspråk för allt som inte är prestandakritiskt. Har bara gjort några småsaker med Rails bara för att känna på det.

Är både förvånad och inte förvånad att Ruby inte används mer. Förvånad då det är ett extremt väldesignat språk där designen verkligen tänkt till och där man verkligen har en stark teoretisk grund för designvalen.

Inte förvånad då sådana saker aldrig haft någon större relevans för språks popularitet tidigare. T.ex. så hade Lisp redan på 50-talet de flesta finesser som "moderna" språk som C# och Swift implementerat och det togs emot som väldigt revolutionerande.

Språk som Clojure och Rust har modeller för multitrådning som omöjliggör race-conditions (de uppnår det på helt olika sätt men race är de absolut värsta buggar man kan jaga).

Erlang är specifikt designat för extrem tillgänglighet. Enda plattformen som någonsin lyckats nå 99,9999999 % (nio nior) tillgänglighet. Det under en tidsperiod på 20 år.

I stället är de populära språken C++ (enormt utbud av sätt att skjuta av sig både fötterna och huvudet), C# och Python (båda språken har enormt med finesser, många verkar tillagda av olika grupper som aldrig pratat med varandra), Java och JavaScript (tja, båda språken har en rad designmissar dock har båda idag runtime-plattformar i världsklass och dessa kan användas av andra språk)...

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

@Yoshman Jämförelser blir nästan alltid biased. Det visar dock på att du kan få ut hög prestanda under vissa förutsättningar precis som andra gjort.

Att microsoft diversifierar sig är bra tycker jag. TypeScript är intressant, att bland annat slippa viss java script gissel är skönt. De tycks hitta/leta lite nya alternativ vilket är bra för olika situationer.

Min erfarenhet hittills av core är bra prestanda samt att det går riktigt snabbt att koda backend och webb.
Razor för mvc views har också blivit bättre men Angular2 har nyss kommit och lär bli go to för många ist för razor på webben så att just razor har blivit bättre är inte så stort.

Jag tror inte att det är azure som drivit fram core. Det är säkert en del men också influenser från ett mer modulariserad arkitektur samt att ~15 år gamla system.web var så slött att ms hade vissa problem att konkurrera med prestandan. Det gick inte heller att bara riva ut för det hade så många beroenden.

Att Rails inte används mer tror jag är liknande c#, andra språk fanns före och vissa regioner tar till sig nyheter mer långsamt än vi. Att det som java script är ett dynamiskt otypat språk är dess fördel och nackdel.
Jag behövde korrigera en rails webb där olika varianter av en klass användes lite här och där med helt olika implementationer där det ibland saknades metoder samt varierande datakällor, det var råddigt och tog mer tid än det hade gjort i ett statiskt typat språk. Active recods, scopes, var inte bra prestanda och en smula råddigt det med.
Det till trotts tycker jag rails har sin charm och för simpla appar funkar bra. Men visst var det grundaren eller någon nära som hoppade av hela rails projektet?

Instämmer verkligen om C++, svårt att se varför det är så stort fortfarande. Givet att vid hög prestanda är det intressant men java eller c# räcker långt.

Clojure eller Rust har inget företag efterfrågat vad jag sett och jag har inte haft tid att testa dem privat.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare

@IceDread: man måste alltid hålla isär två dimensioner

  • statiskt typat vs dynamiskt typat, binär skala

  • starkt typat vs svagt typat, gradvis skala

Ruby, Python och Clojure är alla exempel på dynamiskt och väldigt starkt typade språk.

C#, Java och C++ är alla exempel på statiskt typade och starkt typade språk.

Go, Rust och Haskell är exempel på statiskt typade och extremt starkt typade språk

C är ett exempel på statiskt typat och svagt typat språk.

JavaScript och Perl är båda exempel på dynamiskt typade och väldigt svagt typade språk.

C++ är stort därför det faktiskt är enda rimliga valet om man har prestandakrav ihop med någon form av realtidskrav. Alla språk med s.k. "tracing GC" ("äkta" GC och inte någon form av referensräkning).

C är fortfarande stort av en rad skäl. T.ex. är det enda rimliga valet för OS-kärnor, alternativet är en delmängd av C++ där man skalat bort de delar som inte lämpar sig för OS-kärnor. Vissa mikrokontrollers kör "C++", men i praktiken är "C med nykelordet class" betydligt närmare sanningen.

Att C# lyckades (som förövrigt kom ut 5 år efter Ruby) är endast en effekt av att Microsoft stod bakom och de lade all sin vikt bakom denna plattform från start. Utan det stödet hade det blivit ett i raden av språk som finns men få använder. Inte för att C# på något sätt är dåligt, det har absolut ett bra språk, men på det stora hela sticker det inte ut på något jätterelevant sätt jämfört med andra språk som fanns innan.

Att så få språk lyckas är ju trots allt en konsekvens av att programspråket betyder rätt lite för slutresultatet. Bra programmerare skriver bra program i nästan alla språk de behärskar och dåliga programmera gör kattskit oavsett. Finns vissa specialfall där språk spelar roll, men oftast spelar plattformen större roll.

Tar man exemplet Rails (som jag som sagt aldrig använt, gillar Ruby som ett generellt RAD-språk) så är den enda egentliga kritik jag sett att plattformen inte är effektiv nog att hantera större projekt. Och då klarar man ändå sådant som github, så är nog rätt få människor som jobbar på plattformar som är för stora att inte kunna hanteras av Rails.

Angående jämförelsen. Det är inte bara lite sned, den är ju totalt felaktig givet vilka siffror man får på den "konkurrerande" plattformen, min 15 W TDP laptop presterar bättre än så med det jag skriver och har aldrig gjort ett professionellt NodeJS program (har i.o.f.s väldigt bra koll på flaskhalsar runt networking och borde därför rimligen inte göra de mest löjliga misstagen).

Det du skriver på sista raden befäster lite min bild av den typiska C#/.NET programmeraren: de gillar att framhålla C# förträfflighet men ofta visar det sig att man inte har någon relevant erfarenhet av speciellt många andra språk.

Försöker själv "tvinga" mig att lära mig minst ett nytt programspråk per år, ungefär till nivån att jag utan problem skulle kunna hoppa på ett konsult-gig där man använder språket med max en dags förberedelse.

Har aldrig förväntat mig att få jobba med språk som Haskell, Clojure eller Erlang. Men genom att lära sig dem får man perspektiv på språkdesign, man lär sig hitta andra vägar att lösa vissa problem. När man lärt sig 10-15 språk märker man också det gå allt fortare att lära sig nya språk, man lär sig vilka saker man måste lära sig för att förstå grundtanken med språket. Kort och gott, det gör en till en bättre programmerare oavsett vilket språk man råkar använda för tillfället.

Sedan ska aldrig säga aldrig. Har genom åren jobbat med en del språk, som t.ex. TCL, VB, ADA och ARM-assembler, som jag aldrig skulle gissat kunde vara relevant att ha koll på i förväg. Lite besviken att aldrig ha kommit i direkt kontakt med Cobol, är i.o.f.s. ett språk jag inte heller lärt mig så kanske lika bra det

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

@Yoshman
Jag tycker man brukar tala om dynamiskt (java skript, ruby on rails) och statiskt (java, c#) typade språk. Du har säkert rätt att man bör lägga till starkt / svagt också, sällan man för en diskussion om det.

Vissa handel/börser där latensen måste var mycket låg använder inte C++ utan java. Prestanda kan fås med andra språk också. Extrema optimeringar lättast med C++ men snacka om uppfinna hjulet på nytt och mängder libs och minneshanteringsissues man får rätta i C++ program.

Vill du däremot ha ännu mer prestanda så är det assembler som gäller, inte C/C++.

Poängen är att för inbyggda system och hög prestanda behövs inte C++ även om det fortfarande är stort för just spel och grafik och från vad jag kan se inte nödvändigt annars.

Klart C# lyckades pga ett stort företag i ryggen. Finns en miljard språk där ute, vem orkar upptäcka dem? Lyfter några framstående utvecklare dem i media så endast då. Ms hade också en strategi. Ofta ett sätt att göra en implementation på och du behövde inte som i java välja bland 3 olika date time klasser. Svårt att se varför java är så stort fortfarande när det är så eftersatt på så många håll och sen oracle... men visst prestanda i java har varit riktigt bra på backend och körbart på många plattformar men används oftast på grund av det, utan personers vanor.

Ang. Jämförelsen så bygger den på vad olika team presterat. Varför skulle ett företag bry sig om att förbättra någon annans mätning?
Tycks lätt för dig att ignorera när jag uttryckligen skriver att det är bias, men varför bry sig...

Om du försöker lära dig ett programmeringsspråk per år så undrar jag hur mycket tid du har och vad för jobb. Flera tycks försöka bli bra på front-end eller back-end, databas och senare allt. Att bli bra på ett språk på ett år så undrar jag vad din definition av bra är.

Ang. C# programmerare, kunde inte bry mig mindre. Sådana påhopp brukar vara vanliga bland religiösa programmerare.
Från vad jag sett når C++ programmerare mål snabbast, java programmerare sist

Glöm inte att programmeringsspråk är verktyg för att nå ett mål och bör väljas därefter samt företages personals kunskaper.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Datavetare

@IceDread: sa aldrig att jag skulle bli "bra" i språket, bättre än 90 % räcker för mig
Det viktigast med övningen är att i princip obehindrat kunna göra det jag vill i språket och framförallt förstå dess grundläggande filosofi. Programmering är min största hobby, lägger åtskilliga antal timmar per månad på detta utanför arbetet. Något andra kanske lägger på att titta på film, spela datorspel, lösa korsord eller liknade.

> 99% av alla programmerare producerar långsammare och på alla andra möjliga andra sätt sämre resultat i assembler än vad moderna kompilatorer fixar. Finns några extremt specifika fall där man manuellt kan använda assembler på ett sätt som inte kan uttryckas i t.ex. C eller C++ så att en kompilator kan generera samma kod. ISA i moderna CPUer är inte längre designad för att hanteras av människor, den är helt designad för att effektivt kunna användas av kompilatorer så inte så konstigt att människor har svårt att spöa kompilatorer idag.

Ett sådant fall är beräkning av internet-checksumma där man kan utnyttja "carry-biten" på ett sätt som inte har en motsvarighet i C/C++.

En börs, antar att det handlar om HFT i detta fall, har inga hårda realtidskrav. Man vill ha låg genomsnittlig latens och hög genomströmning, det är absolut möjligt även med "tracing GC". Faktum är att många algoritmer för multi-CPU-system som är i klassen "lock-free" och "wait-free" endera inte är möjligt utan "tracing GC" eller i alla fall blir väldigt ineffektiva utan GC.

Så är man ute efter låg genomsnittlig latens, hög skalbarhet och hög genomströmning är moderna JVM:er de bästa plattformar man hittar idag. Dock är C och C++ bättre val för applikationer med realtidskrav, även relativt mjuka sådana som behövs t.ex. spel. Har man hårda realtidskrav fungerar överhuvudtaget inte språk med "tracing GC" då det är omöjligt att beräkna en övre gräns för latens (i sådana fall går det normalt sett inte att använda någon form av dynamisk minneshantering).

Anledningen att inbyggda-system, även de utan realtidskrav, normalt undviker plattformar med "tracing GC" är att en sådan plattform presterar bättre ju närmare man kommer abstraktionen att det finns oändligt med RAM. Och omvänt, vill man hålla mängden allokerad mängd RAM väldigt låg presterar en "tracing GC" horribel. i dessa lägen kan man endera köra med plattformar med ARC (t.ex. Swift, Python körde i alla fall tidigre med detta men kan vara "tracing GC" idag), RAII (som C++ och Rust) eller med manuell minneshantering.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer