Guten Morgen
Ich hab da mal ne Frage...
Ich überhole grad ein älteres Tool von mir, welches unter anderem Bilder skaliert. Das arbeitete bisher vollständig NSThread basiert.
Nun hab ich angefangen es auf NSOperationsQueue umzubauen und würde da wohl mal ein bisschen Tips zum besseren Verständnis benötigen…
Momentan erzeuge ich mein eigenes Queue und lade es mit Blockoperations via addOperationWithBlock: Das können je nach Benutzung schnell mehrere 10'000 Blöcke werden. Die ich alle per Enumeration hintereinanderweg in das Queue schiebe.
Apple empfiehlt ja das man NSOperationQueueDefaultMaxConcurrentOperationCount für den Max Concurrent Operation Count verwenden soll. Wenn ich das verwende, wird das System leicht "unresponsiv" bis dahin, daß selbst die ganzen Analysetools "stehen bleiben".
Begrenze ich es auf "7" concurrent operations (core i7 mit 4/8 Kernen) scheint alles in Butter – allerdings bleibt die Systemlast deutlich unter den Möglichkeiten zurück (i.A. laufen nur 2 Kerne unter Last).
Aufgefallen ist mir, daß das Queue sehr viele Threads erzeugt...
Kann es sein das ich mit derartig vielen Operationen den Threadpool "exhauste" und NSOperationQueue das nicht steuert? Sprich ich selber darauf achten muß wieviel Operationen ich gleichzeitig ins Queue werfe?
An sich würde das ja irgendwie der Idee zu wieder laufen wenn ich doch wieder ein eigenes Queue bauen muß?
Zumal Apple in der Doku meint, das man bei " create 10,000 operation objects and submit them to an operation queue" auf sein Memory footprint achten muß - und der bleibt bei mir ziemlich klein: bei 15'000 Nodes die ich skaliere liegt der RAMverbrauch noch deutlich unter 1Gb... Ich hab nun auch nichts gefunden ob es anderweitig Limitierungen gibt?
Ich hab da mal ne Frage...
Ich überhole grad ein älteres Tool von mir, welches unter anderem Bilder skaliert. Das arbeitete bisher vollständig NSThread basiert.
Nun hab ich angefangen es auf NSOperationsQueue umzubauen und würde da wohl mal ein bisschen Tips zum besseren Verständnis benötigen…
Momentan erzeuge ich mein eigenes Queue und lade es mit Blockoperations via addOperationWithBlock: Das können je nach Benutzung schnell mehrere 10'000 Blöcke werden. Die ich alle per Enumeration hintereinanderweg in das Queue schiebe.
Apple empfiehlt ja das man NSOperationQueueDefaultMaxConcurrentOperationCount für den Max Concurrent Operation Count verwenden soll. Wenn ich das verwende, wird das System leicht "unresponsiv" bis dahin, daß selbst die ganzen Analysetools "stehen bleiben".
Begrenze ich es auf "7" concurrent operations (core i7 mit 4/8 Kernen) scheint alles in Butter – allerdings bleibt die Systemlast deutlich unter den Möglichkeiten zurück (i.A. laufen nur 2 Kerne unter Last).
Aufgefallen ist mir, daß das Queue sehr viele Threads erzeugt...
Kann es sein das ich mit derartig vielen Operationen den Threadpool "exhauste" und NSOperationQueue das nicht steuert? Sprich ich selber darauf achten muß wieviel Operationen ich gleichzeitig ins Queue werfe?
An sich würde das ja irgendwie der Idee zu wieder laufen wenn ich doch wieder ein eigenes Queue bauen muß?
Zumal Apple in der Doku meint, das man bei " create 10,000 operation objects and submit them to an operation queue" auf sein Memory footprint achten muß - und der bleibt bei mir ziemlich klein: bei 15'000 Nodes die ich skaliere liegt der RAMverbrauch noch deutlich unter 1Gb... Ich hab nun auch nichts gefunden ob es anderweitig Limitierungen gibt?
snafu
:() { :|: &};:
sometimes i dream in hex
Obey gravity! Because its a law!
:() { :|: &};:
sometimes i dream in hex
Obey gravity! Because its a law!