Warum ist PB schneller als Go oder NodeJS (Filesystem)

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Warum ist PB schneller als Go oder NodeJS (Filesystem)

Beitrag von Agent »

Hallo liebe PBler.

ich meine es irgendwo gelesen zu haben (damals als ich mit PB anfing): In welcher Sprache ist PB entwickelt?

Warum ich wieder zu der Frage komme? Wegen der "krassen Perfomance" von Purebasic.
..oder ich verstehe oder mache was falsch.

Denn, ich habe mich gewundert warum meine Routine zum "rekursiven Einlesen eines Pfades/laufwerks" so viel schneller ist als wenn ich eine ähnliche Routine in NodeJS oder Go(lang) schreibe.
Zumal bei NodeJS und Go die Routinen bereits vorhanden sind, dort wir ja quasi mit einer Zeile rekursiv eingelesen. In PB ist das ein tick mehr (in meinen Fall ne ganze Seite).

Als beispiel: Lass ich von der SSD mal eben ~10.000 Dateien einlesen, braucht

NodeJS lässige 1530ms (also gut 1,5 sek)
Go (was ja als so schnell im Netz benannt wird), schon gute 500ms
meine PB-Routine (nix besonderes), fixe 140ms.

Mir ist klar das es vielleicht in anderen Bereichen wie komplexe Berechnungen etc anders aussehen kann, dennoch wundere ich mich.
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Warum ist PB schneller als Go oder NodeJS (Filesystem)

Beitrag von ccode_new »

Hallo Agent!
Warum ist PureBasic schneller als... ?
Ich denke es kommt auch immer auf den verwendeten Algorithmus und den Programmaufbau als solchen an.

PureBasic ist eigentlich nicht schnell.

Oder doch ?

Java, C#, Python, etc.

Es gibt sehr viele Programmiersprachen mit denen man viel schnellere Programme (nicht schneller :wink: ) als mit PureBasic schreiben kann, obwohl man eigentlich oft sagt das diese Programmiersprachen langsamer sind als PureBasic.

Das kann viele Gründe haben:
Zum Beispiel kann es in einer anderen Programmiersprache eine Funktion geben die einen super hypergenial ausgetüftelten schnellen Algorithmus besitzt und man diese Funktion einfach im Baukastenprinzip für sich nutzt. Und unter PureBasic hat man diese Funktion nicht und ist natürlich selber auch viel zu dämlich auch nur ansatzweise so einen performanten Algorithmus zu schreiben.

Naja, so ist das halt.
In welcher Sprache ist PB entwickelt?
PureBasic ist eine auf C und Assembler basierende Programmiersprache.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Warum ist PB schneller als Go oder NodeJS (Filesystem)

Beitrag von Bisonte »

PB Code wird meines Wissens in Assembler umgesetzt. FASM als Stichwort.
Die Programme sind daher recht klein und schnell.

Was deinen Zeitvergleich angeht, ist das womöglich falsch "gemessen".
Beim einlesen von Verzeichnissen wird ein Zwischenspeicher gefüllt, der beim erneuten einlesen
benutzt wird, anstelle der Festplatte. Selbst bei einer SSD bringt das Geschwindigkeit.

Wenn du solche "FileOperationen" messen willst musst du dafür sorgen, dass der Filecache leer ist.

(Oder den Rechner nach jedem Durchgang neu starten ;) )
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Re: Warum ist PB schneller als Go oder NodeJS (Filesystem)

Beitrag von Agent »

@bisonte

Das ist mir klar. ich habe den/die Tests 1. in jeder Sprache mind. 3x durchführen lassen (ne for-loop). Dann teilweise jede sprache nacheinander. Zwischendrin immer mal neu gestartet und eine andere Sprache als erstes starten lassen. Die Ergebnisse waren immer bis auf wenige ms (vernachlässigbar) gleich. :)
Für mich ist das schon so vergleichbar.

Mir sind die ganzen unterschiede und Parameter schon (mehr oder weniger genau) bewusst. Dennoch wundere ich mich das so populäre, quelloffene Programmiersprachen, die ja von unzähligen auch optimiert werden im Verhältnis so schlecht abschneiden. Mich freut es einerseits das PB (in dieser Sache) so gut dabei ist, wundert mich dennoch.
Erklärt vielleicht aber vielleicht das es in C /ASM entwickelt ist :)

btw: Java hat 1625ms gebraucht (grad mal probiert).

Ich bin immer noch auf der suche nach einer weiteren Programmiersprache und spiele mit einigen herum. Mir ist klar das jede so ihre Vorzüge hat und es keine "beste" "universalsprache" gibt. Dennoch hatte ich erwartet das man was schnelleres findet als eine Basic Spache? o.O Bei den interpretern / script-Sprachen hat es mich nicht gewundert das die langsamer sind. Bei Go schon. Und mir ist klar das ein Go, NodeJS etc async arbeiten (können) und somit vieles gleichzeitig abarbeiten was sowas natürlich kompensieren kann. ;)

Naja. ich wollte das auch nur mal loswerden :)
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Warum ist PB schneller als Go oder NodeJS (Filesystem)

Beitrag von ccode_new »

....
Und dann stellen sich die Fragen nach nutzbaren API-Schnittstellen.

Welche Funktionen werden von der Betriebssystem-API geboten ?

Kann man diese nutzen ?

Kann man Funktionen anderer Programmiersprachen nutzen ?

Und so weiter ...
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Warum ist PB schneller als Go oder NodeJS (Filesystem)

Beitrag von GPI »

Kann mehrere Gründe haben. Zum einen kann schlicht das Betriebsystem was zwischenspeichern, deshalb sollte man bei solchen tests eigentlich immer einen Neustart machen.

Was vielleicht auch wichtig ist: Purebasic-Programme laufen nativ, sprich die CPU kann alles selbst machen, es gibt keine zwischenschicht (wie sie bei Java vorkommt). Eine Compilersprache.

NodeJS setzt anscheinend auf Javascript-Laufwerksumgebung. Solche Umgebungen fressen Zeit und Resourcen. Du musst dir das so vorstellen: Ein PB programm spricht die Sprache der CPU/Betriebsystems, es kann sofort ausgeführt. Das NodeJS ist quasi Japanisch. Es muss zur Laufzeit in die CPU-Sprache übersetzt werden. Das kostet natürlich Zeit. Vorteil ist allerdings, wenn du die Laufzeitumgebung an eine andere Hardware/Betriebsystem-Kombi rausbringst, alle Programme sofort darauf laufen. Bei PB-Programmen müsstest du neu kompilen - oder wenn es bspw. auf Android laufen soll - hast du völlig verloren.

GO scheint wohl andere Schwerpunkte zu legen, der code läuft nativ, aber es nutzt einen Garbage Collector ( https://de.wikipedia.org/wiki/Garbage_Collection ) - das bedeutet hier wohl auch einen gewissen Aufwand in Verwaltung gesteckt wird. Vorteil ist, das der Speicher effektiver genutzt werden kann. Unter Umständen gibts noch andere Vorteile.

Java ist übrigens sowohl Interpreterartig und hat einen Garbage Collector :) (p.s. Javascript müsste auch einen Garbage Collector haben).

Normal hätte ich gesagt, das beim durchsuchen eigentlich die Verzeichnisoperationen jeden Geschwindigkeitsvorteil vernichten. Das trotzdem solche Unterschiede vorkommen, kann bspw. an Strings liegen und wie sie verwaltet werden. Ich geh mal davon aus, das du nicht nur einliest, sondern alles irgendwo abspeicherst. Hier könnte bei GO öfferst der Garbage Collector aktiv werden und Speicher aufräumen.

Es kommt halt immer drauf an, was du wie machst. Nicht immer ist Geschwindigkeit das einzige Kriterium. Sicherheit kann ein weiteres sein. Oder Portabilität. Je nach Aufgabe des Server kann auch eine effizientere Speichernutzung vorteilhaft sein.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten