대기열을 많이 생성해야하는 경우 (예 : 이미지로드에 10 개 이상 대기열) 글로벌 동시 대기열을 사용하거나 동일한 수의 사설 작업 발송 대기열을 만드는 것이 더 빠릅니까? 쿼드 코어 CPU의 경우 동시 대기열이 4 개의 동시 대기열로 제한되어 연속 대기열 작업의 직렬 대기열로 바뀝니 까?동시 대기열 대 사설 발송 대기열
답변
얼마나 많은 동시 작업이 허용되는지를 제한하는 고유의 동시 대기열을 만드는 것이 좋습니다. 예를 들어, maxConcurrentOperationCount
이 4 또는 5로 설정된 단일 동시 NSOperationQueue
을 만들 수 있습니다. 그런 다음 동기 이미지 검색 요청을 모두 추가하십시오. 예를 들어 :
[queue addOperationWithBlock:^{
// request image
}];
당신은보다 애호가 얻을 수 있지만, 이것은 당신이 개 제안을 어떤 기본적인 대안 :
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = 5;
은 그럼 그냥 같은 것을 사용하여 이미지의 모든 요청을 추가 할 수 있습니다. 그러나 이렇게하면 동시 네트워크 요청 수가 5 개를 넘지 않게됩니다.
GCD 제안뿐만 아니라이 기능이 작동하려면 작업 자체가 동기되어야합니다. 동기가 아닌 경우 작업이 수행 할 때까지 작업이 완료되지 않도록 추가 작업을 수행해야합니다.
NSOperation *operation = [NSBlockOperation operationWithBlock:^{
// do network request here
}];
[completionOperation addDependency:operation];
[queue addOperation:operation];
그리고 완료되면 모든 대기열 : 그런 다음 작업을 추가
NSOperation *completionOperation = [NSBlockOperation operationWithBlock:^{
// this is what will happen when they're done
}];
: 당신은 그들이 모두 완료하면, 당신은 완료 작업을 사용할 수 있습니다 알고 싶다면
그런 다음 완료 작업을 대기열에 넣을 수 있습니다. 나머지 작업이 완료 될 때까지 실행되지 않습니다 (두 작업 사이의 종속 관계가 선언 되었기 때문에) :
[queue addOperation:completionOperation];
빠른 작업은 작업에 따라 다릅니다.
전역 동시 대기열은 동시 작업 수를 사용 가능한 하드웨어와 일치 시키려고 시도합니다. 그것은 문서화되지 않았기 때문에 코어의 수와 일치하거나 일치하지 않을 수 있습니다 (또는 코어가 하이퍼 스레드이고 작업이 허용되는 경우 코어 수를 두 배로 늘릴 수도 있습니다). 대기중인 작업 (예 : 네트워크 작업 또는 디스크 I/O)이 차단되면 글로벌 대기열이 새로운 작업을 시작합니다.
독자적으로 대기열을 만들어 문제를 강제로 실행할 수 있지만 이는 도움이되지 않습니다. 4 개의 코어가있는 경우 10 개 또는 20 개의 큐 또는 동시 CPU가 많은 동시 작업을 수행하는 것이 전반적인 속도를 향상시키는 데 도움이되지 않습니다. 리소스를 최대한 활용하면 최대한으로 활용할 수 있으며 개인 큐를 추가하면 변경되지 않습니다.
- 1. 다중 직렬 발송 대기열 동시 실행 중입니까?
- 2. 대기열 대 준비 대기열
- 3. 일반 대기열 대 SEDA 대기열
- 4. 여러 메서드가있는 발송 대기열? iPhone
- 5. 동시 세트 대기열
- 6. Berkeley DB, 동시 대기열
- 7. 여러 동시 대기열 조정
- 8. dispatch_async (대기열, 차단) 대 dispatch_async (대기열) {차단}
- 9. 명령 패턴 대 대기열
- 10. Redis 대기열 대 MSMQ
- 11. redis의 동시 우선 순위 대기열?
- 12. 동시 패키지의 차단 대기열 방법.
- 13. 동시 처리 문제 - 차단 대기열
- 14. 동시 가변 우선 순위 대기열
- 15. .net 4.0 동시 대기열 사전
- 16. Alamofire 및 동시 작업 대기열
- 17. 일관된 발송 대기열 : com.apple.root.default-qos.overcommit crash
- 18. Swift 2.2 : 루프 및 발송 대기열
- 19. 대기열 및 대기열 제거 방법의 대기열 계수는?
- 20. 트랜잭션 대기열/대기열 풀기
- 21. 레일 : 대기열 대기열
- 22. 대기열, 지연, 대기열
- 23. CRON을 통한 메시지 대기열 대 DB 테이블 대기열
- 24. api 서버 - 대기열 서비스 대 로컬 미니 대기열
- 25. 대기열
- 26. 대기열
- 27. 대기열
- 28. .NET 타사 라이브러리에 동시 대기열 유형이 있습니까?
- 29. 여러 대기열 및 작업 대기열
- 30. Linux의 대기열 대기열 크기는 얼마입니까?
FYI - 더 많은 질문을 게시하기 전에 최근의 몇 가지 질문으로 돌아가서 투표를해야하는지 또는 일부 답변을 수락해야하는지 확인해야합니다. 지난 몇 가지 질문 중 몇 가지를 수락하지 않았습니다. 답변을 수락하면 질문이 종료되고 평판이 나옵니다. – rmaddy