• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Prototyping verbraucht 100% CPU load in NodeJs

ja, anders geht es nicht, wenn du mit cb arbeiten willst
Mit CBs gehts nicht anders. Deswegen würde ich ja auch mit Events arbeiten. Finde ich persönlich jetzt übersichtlicher und flexibler - aber das ist Geschmakssache.

Aber warum nicht so:
Kann man natürlich auch so machen.

Korbinian's Ringbuffer funzt auch ohne murren.
Wenigstens etwas.

.bind() kann ich nicht testen

Du kannst ja einfach mal das in der nodejs Console laufen lassen:
Code:
function f(){
	console.log(this);
}

var g = f.bind([1, 2, 3]);
g();

Aussehen soll‘s aber wie in #13
Warum?

Wenn du jetzt nur noch 2,6% CPU-Last hast, ist das Problem damit jetzt doch gelöst, oder? Oder hast du immer noch das Speicherproblem?

PS: Warum sollte sich die Last mit der Zeit erhöhen. Der muss ja immer das Gleiche machen.
 
kkapsner schrieb:
Du kannst ja einfach mal das in der nodejs Console laufen lassen:
Geht wunderbar.

kkapnser schrieb:
Hä, damit meinte ich den Syntax… hast da was falsch verstanden
Das war gemeint:
Code:
downmix.getMix(function(newBlockOfSamples){
	console.log(newBlockOfSamples.length);
});// downmix.getMix wird nie ausglöst


kkapsner schrieb:
Wenn du jetzt nur noch 2,6% CPU-Last hast, ist das Problem damit jetzt doch gelöst, oder? Oder hast du immer noch das Speicherproblem?
Ja für's erste ist das problem glöst. Aber dennoch wenn ich eine Prototyp basierende Funktion zu schnell ausführe fährt die cpu 100%
Sieh dir das Video an.



kkapsner schrieb:
PS: Warum sollte sich die Last mit der Zeit erhöhen. Der muss ja immer das Gleiche machen.
Wenn ich mit einer Samplerate von 8000Hz in das Skript reingegangen bin, dann kann man das Visuell sprich mit den Menschlichen Auge sehen wie die cpu last immer höher steigt.
Wie gesagt: nur wenn man Prototyp basierende Funktion durch ein Schleife aufruft.

Warum das so ist, das wissen die Götter. Meine Theorie, hesst hat es schon erwähnt:
hesst schrieb:
dann hat dein algorithmus mit dem verarbeiten der daten richtig gut zu tun, bzw. wird wohl nicht mal fertig ehe neue daten eintreffen,
Warum das nun einmal so geht und so nicht:confused:
 
Mit CBs gehts nicht anders. Deswegen würde ich ja auch mit Events arbeiten. Finde ich persönlich jetzt übersichtlicher und flexibler - aber das ist Geschmakssache.
sich selbst eigene events generieren? kann man auch machen, ist aber auch nichts andere, als das cb am objekt zu speichern vom ablauf her, was ich meine, man bringt zusammen gehörenden code so auseinander, dass der überblick verlohrengeht.
eig. hat er ja (soweit ich verstanden habe) eine blockverarbeitung input-->BLOCK-->output und davon mehrere, reciver->downmixer->filter1->filter2-> so würde man das dann auch implementieren, verschiedene blöcke die man verschalten kann, dann ist auch der ablauf wieder leicht zu überblicken

Ja für's erste ist das problem glöst. Aber dennoch wenn ich eine Prototyp basierende Funktion zu schnell ausführe fährt die cpu 100%
die funktionen werden aber doch immer gleich schnell ausgeführt. vielleicht hast du vorher das letzte callback(mit den getMix-daten) pro index und jetzt nur noch 1 mal aufgerufen(je nachdem, wo du das cb jetzt rufst - in oder außerhalb der schleife), aber das cb macht nichts, das spielt also keine rolle, der rest ist gleich

Wie gesagt: nur wenn man Prototyp basierende Funktion durch ein Schleife aufruft.
mit prototype hat das nichts zu tun

Warum das so ist, das wissen die Götter. Meine Theorie, hesst hat es schon erwähnt:
dazu hättest du aber was ändern müssen
 
Ihr seid auch richtige Nachtschwärmer xD

hesst schrieb:
was ich meine, man bringt zusammen gehörenden code so auseinander, dass der überblick verlohrengeht.
eig. hat er ja (soweit ich verstanden habe) eine blockverarbeitung input-->BLOCK-->output und davon mehrere, reciver->downmixer->filter1->filter2-> so würde man das dann auch implementieren,

genua so ist es :d und wenn ich mal ein Glied in der Kette nicht brauch wird das Objekt nicht erstellt.
Wenn ich mit der Verschalteten Art und weiße immer weitergemacht hätte, wär ich irgendwann im unteren rechten Bildschirmrand

hesst schrieb:
mit prototype hat das nichts zu tun && dazu hättest du aber was ändern müssen
Das ist mir jetzt egal. Es funzt jetzt einwandfrei. Vom Syntax her geht’s auch, bin vorerst zufrieden.:cool:
 
Wenn ich mit der Verschalteten Art und weiße immer weitergemacht hätte, wär ich irgendwann im unteren rechten Bildschirmrand
nein, ich meinte das in etwa so:
Code:
<html>
  <head>
    <title></title>
    <script>
      function Block()
      {
        
      }
      Block.prototype.input = function(data)
      {
        data = data.map(this.doWork.bind(this));
        this.output(data);
      }
      Block.prototype.doWork = function(data)
      {
        return data;
      }
      Block.prototype.output = function(data)
      {
        if (this.connectedTo)
        {
          this.connectedTo.input(data);
        }
      }
      Block.prototype.connect = function(out)
      {
        if (out && typeof out.input == "function")
        {
          this.connectedTo = out;
        }
      }
      Block.prototype.connectedTo = null;
    </script>
    <script>
      function Gstreamer()
      {
        
      }
      Gstreamer.prototype = new Block();
      Gstreamer.prototype.doWork = function(data)
      {
        return data * 2;
      }
    </script>
    <script>
      function DownMixer()
      {
        
      }
      DownMixer.prototype = new Block();
      DownMixer.prototype.doWork = function(data)
      {
        return data - 1;
      }
    </script>
    <script>
      function Filter1()
      {
        
      }
      Filter1.prototype = new Block();
      Filter1.prototype.input = function(data)
      {
        data = data.reduce(this.doWork.bind(this), []);
        this.output(data);
      }
      Filter1.prototype.doWork = function(data, value, idx)
      {
        if (idx % 2)
        {
          data.push(value);
        }
        return data;
      }
    </script>
    <script>
      function Display()
      {
        
      }
      Display.prototype = new Block();
      Display.prototype.doWork = function(data)
      {
        console.log(data);
      }
    </script>
    <script>
      // main
      var gs = new Gstreamer();
      var dm = new DownMixer();
      var f1 = new Filter1();
      var d = new Display();
      
      gs.connect(dm);
      dm.connect(f1);
      f1.connect(d);
      
      //GstLaunch.stdout.on('data', gs.input.bind(gs));
      gs.input([1,2,3,4,5,6,7,8,9]);
    </script>
  </head>
  <body>
    
  </body>
</html>
 
Hi hesst, ich habe mir deinen code angesehen, ich habe jetzt meinen Ablauf vor Augen und damit komme ich klar. Ich bin sowieso zurzeit sehr beschäftigt und muss das NodeJs Projekt erst mal beiseitelegen.

In diesem Sinne,
xorg1990
 
Zurück
Oben