2
디스패치 큐에 dispatch_semaphore_wait
을 사용하는 경우 많은 스레드가 dispatch_semaphore_wait
에서 차단되는 경우 스레드의 디스패치 큐가 굶어 질 수 있습니까?디스패치 대기열에서 dispatch_semaphore_wait를 사용할 때 스레드 고갈?
parallelDownloadsSemaphore = dispatch_semaphore_create(4);
[...]
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
dispatch_semaphore_wait([self parallelDownloadsSemaphore], DISPATCH_TIME_FOREVER);
// perform lengthy download
dispatch_semaphore_signal([self parallelDownloadsSemaphore]);
});
차단 된 스레드가 스레드 풀로 반환되지 않으므로 많은 스레드가 차단 된 경우 스레드가 부족할 위험이 있습니다. 그리고 일반적으로 표준 큐의 CPU 코어 당 하나의 스레드 만 사용할 수 있습니까? 누구든지이 문서를 참조 할 수 있습니까? – Twilite
스레드의 차단으로 나는 꽤 확신하고 항상 이것을 피해야합니다. 동시 대기열 당 스레드 수는 어떻게 든 CPU 수로 제한된다는 것은 내가 한 일이었습니다. 그러나 이것으로 나는 절대적으로 확신 할 수 없다. 나는 약간의 참고 문헌을 찾으려고 노력한다. –