2012-04-04 8 views
1

Ich versuche, eine Funktion zu erstellen, die 100 Anrufe pro Sekunde sendet und alle 60 Sekunden auf 200 Anrufe pro Sekunde erhöht. Der Code ist unterC Testgenerator für Last

for (i = 1; i <= 240; i++) { 
     for (j = 0; j <= 100; j++) { 
      send_tcp(); 
     } 
     sleep(1); 
     if(i %60 == 0) j=j+200; 
     else j = j*1; 
} 

Die send_tcp() ist im Grunde nur eine Buchse öffnen und TCP an eine bestimmte Adresse senden. Das Problem ist, dass für j = 100 jede Sekunde korrekt gesendet wird. Wenn jedoch j = 300, geht es nach 3 Sekunden, um 300 Tcp zu senden, und es dauert 10 Sekunden, um eine 500 Tcp-Anforderung zu senden. Grundsätzlich, wenn das j in der Zahl geht, kann ich j Anruf/Sekunde nicht bekommen.

mir dieses Denken ist nur ein logischer Fehler, aber ich kann nicht herausfinden, wie J Anruf/Sekunde zu senden, unabhängig davon, welche Zahl j ...

für jede Antwort schätzen würde

- Sorry für mein schlechtes Englisch, im Grunde muss ich j Nummer von "send_tcp"/Sekunde machen. Wenn J jedoch größer wird, scheint die J-Nummer von "send_tcp" nicht/Sekunde zu sein, sondern wird zu/3 Sekunden oder mehr.

Antwort

2

Ja, es liegt ein logischer Fehler vor. Sie verwechseln Ihren Schleifenzähler mit der Anzahl der gewünschten Iterationen. Dies ist, was Sie stattdessen tun müssen:

int n_calls = 100; 
for (i = 1; i <= 240; i++) { 
     for (j = 0; j < n_calls; j++) { 
      send_tcp(); 
     } 
     sleep(1); 
     if(i %60 == 0) n_calls+=200; 

} 
+0

ah ja danke für das Zeigen. Ich habe diesen Fehler auch gemacht. Aber wenn Sie dies versuchen, wenn n_class zum Beispiel 500 ist, wird eine Schleife von send_tcp() viel länger dauern als 1 Schleife von 100 send_tcp(). Wenn 100 send_tcp in 1 Sekunde gesendet werden kann, kann jede 500 send_tcp() vielleicht 3 Sekunden dauern, um zu beenden. während ich tatsächlich n_calls pro Sekunde senden muss, egal wie groß die n_calls sind. (Entschuldigung, es ist schwierig, dies auf Englisch auszudrücken .. aber ich hoffe, ich gebe meine Absicht) – heike

+0

Ihr Ziel von "send n_calls pro Sekunde, egal wie groß die n_calls sind" ist nicht erreichbar. Sie benötigen unbegrenzte Bandbreite und Verarbeitungsleistung. –

+0

ja die Absicht ist das, aber ich beschränke es auf 100.300.500. Aber das Ergebnis ist, dass für 100 Anfrage pro Sekunde ausgeführt wird, aber für 300 und 500 dauert es länger. Daher macht es die Server-Seite schwierig, die genaue Verarbeitungszeit zu erfassen ... Wie kann ich zum Beispiel n_class = 500/Sekunden (nicht 3 Sekunden) senden? – heike

1

Sie immer Schleife in der zweiten for von 0 bis 100, ist es 101-mal ist. Sie ändern den Wert von J, aber wenn der for startet, setzt er den Wert J wieder auf 0. Wenn ich verstehe, was Sie tun möchten, ändern Sie die Anzahl der Male, die send_tcp aufgerufen wird, wenn i erhöht wird. Dann müssen Sie Ihren Code in etwas wie das ändern:

count_j=100; 
for (i = 1; i <= 240; i++) { 
     for (j = 0; j <= count_j; j++) { 
      send_tcp(); 
     } 
     sleep(1); 
     if(i %60 == 0) count_j+=200; 

} 

ist es, was Sie wollen?