Hi, On 3 Mar 2014, at 09:43, Gerriet M. Denkmann <gerr...@mdenkmann.de> wrote:
> I have a MyOperation, subclass of NSOperation. > > MyOperation does: > create an NSOperationQueue > add a few MyOperations to this queue > waitUntilAllOperationsAreFinished > (obviously this recursion stops at some point - I do not create an infinite > number of operations). > > The good thing: this is very energy saving: cpu utilisation = 0% > The bad thing: nothing gets done. > > Using Activity Monitor to sample my app I see: > > “Dispatch Thread Soft Limit: 64 reached in 2152 of 2152 samples -- too many > dispatch threads blocked in synchronous operations" IMO the problem is not really the limit itself, but the second part of the message: That your operations themselves are blocking. If you haven’t, take a look at https://www.mikeash.com/pyblog/friday-qa-2009-09-25-gcd-practicum.html He has reasonably expensive blocks, so he aims to have 2x cpuCores operations in flight (and does IO scheduling). > But: Is there some way to find out programmatically at which point my app > should stop adding operations? That depends largely on what your operations do (e.g. whether I/O is involved, duration, dependencies, …). Somehow (constant) scaling with the number of cores available in the machine seems like a good start, as you cannot ever execute more things in parallel. Daniel. _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com