Mac, iOS? If iOS, device or sim? IPad? Try publishing and not running through Xcode.
Sent from my iPhone > On May 22, 2016, at 12:48 PM, Seth Willits <sli...@araelium.com> wrote: > > I'm thoroughly confused and increasingly desperate. *All* of the threads in > my application periodically are blocked for 30-50 ms pretty regularly, about > every 150 ms. > > I'm processing a bunch of data via NSOperations running in a couple of > "serial" (maxConcurrentOperationCount = 1) NSOperationQueues. Each of the > operations is itself synchronous (overriding -main). Everything works as > expected. For performance reasons, I want to move one of the operation types > to being asynchronous and eventually allow two concurrent operations. > > So to start with, I took the synchronous code in -main, moved it into -start, > and added the appropriate KVO notifications for isExecuting, isFinished, and > implemented the right accessors etc. So effectively the operation says it's > asynchronous, but all of its work is actually done in -start, followed by > notifying it's finished. The work is all done correctly, but I noticed it > took significantly longer to complete. > > Thankfully I have a nifty bit of debugging code which tracks the start and > ends of each of these operations and visualizes them, and this is what I > noticed: > http://www.sethwillits.com/temp/upshot/upshot_yJutoKqY.png > > At very regular intervals everything takes longer. > > First I thought it maybe didn't like my semi-async op, so I made it truly > async, and it behaved exactly the same. To make a long story short, I looked > at this a few different ways in Instruments, and have confirmed that what's > actually happening is *every thread is blocked* for those 30-50ms, and then > it just wakes up and everything continues. The threads are literally all in > "Blocked" states. > > > I can't figure out *why* everything is blocked. I can't figure out why simply > making the NSOperation asynchronous would have this crazy effect. It's 100% > reproducible. > > For what it's worth, this one particular operation is doing some Metal > rendering, and that operation is blocked during a call to > -waitUntilCompleted. Which yes, sound suspicious, but is exactly what's > happening in the very-explicitly-synchronous version of the operation, and it > takes 10x less time. I am pretty certain this has nothing to do with the > Metal rendering itself, and has more to do with something confusing the > dispatch manager and every thread is being blocked. > > > Can anyone think of what I should look for to figure out *why* they're > blocked? Looking at the system calls in the Instruments trace timeline just > isn't telling *me* anything. > > > -- > Seth Willits > > > > > _______________________________________________ > > 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/zav%40mac.com > > This email sent to z...@mac.com _______________________________________________ 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