NSOperationQueue를 사용하여 첫 번째 다중 스레드 iPhone 응용 프로그램을 작성하고 있습니다.로드가 더 좋고 잠재적으로 자신의 스레드 디스패치를 관리하는 것보다 빠르기 때문입니다.NSOperationQueue 쓰레드가 느리게 디스패치됩니까?
보드 게임을 별도의 조각으로 나눠서 각각의 보드를 계산 한 후 각 보드를 다시 연결하여 게임의 결과를 계산합니다. 엄청난 오버 헤드로도 빠른 방법처럼 보입니다. 분열과 접합의. 각 보드에 대해 NSInvocationOperation 개체를 만든 다음 OperationQueue로 보냅니다. 보드의 모든 부분을 보낸 후에는 모두 앉아 기다렸다가 기다리는 동안 WaitUntilAllOperationsAreFinished OperationQueue를 호출하여 계산을 마칠 때까지 기다립니다.
이것은 작동해야하는 것처럼 보입니다. 스레드는 매우 잘 작동하지만 스레드는 매우 slooooowwwlllyyyyyy로 불려서 결국 실제로는 단일 스레드 버전보다 계산에 더 오래 걸립니다. 오네! 나는 NSOperationQueue로 보내지는 NSOperations의 생성과 종료를 모니터하고, 얼마 후에 Operation Queue do-diddly-daddlin에 잠시 앉아서 잠시 후에 호출하는 것을 발견했습니다. 처음에는 "어쩌면 대기열이 한 번에 많은 스레드 만 처리 할 수 있습니다"라고 생각한 다음 Queue maxConcurrentOperationCount를 임의의 높은 숫자 (보드 조각보다 훨씬 많음)까지 올렸지 만 동일한 것을 경험했습니다!
어쩌면 누군가가 NSOperationQueue를 "오버 드라이브"로 걷어내어 가능한 빨리 대기열을 보내도록 할 수 있는지 궁금합니다.
상용화 된 iPhone이 두 개의 스레드도 동시에 실행할 수 없다는 점은 중요합니다. 그들은 모두 단일 코어 칩입니다. CPU 바운드 작업의 경우 스레딩은 시간 낭비입니다. –
좋은 지적. 심지어 A4는 여전히 단일 코어 프로세서입니다. http://en.wikipedia.org/wiki/Apple_A4 –