답변

5

제어, 성능 및 휴대 성을 위해 pthread을 사용합니다. 경우에 따라 NSObject 인터페이스를 추가로 사용하려면 NSThread을 사용하는 것이 좋습니다.

사용중인 API (예 : 실시간 I/O 또는 렌더링)와 스레드를 조정해야하는 몇 가지 하위 인터페이스가 있습니다. 때로는 사용하는 스레드와 관련하여 유연성을 가지고있는 경우도 있습니다. 이러한 상황에서는 NSThread을 사용하는 것이 편리하기 때문에 이러한 인터페이스에서 CF 또는 NS 실행 루프를 쉽게 사용할 수 있습니다. 따라서 스레드에서 설정 한 실행 루프 매개 변수는 스레드 자체보다는 API에 더 많은 관심을 가질 것입니다. 이러한 경우 GCD가 반드시 대안이 아닐 수도 있습니다.

하지만 대부분의 개발자는이 수준으로 떨어질 필요가 없습니다.

2

GCD로 수행 할 수없는 이상한 일을해야하는 특별한 상황이있을 수 있습니다. 하지만 GCD로 할 수있는 일은 GCD와 쓰레드가 상호 배타적이지 않습니다. 실제로 쓰레드를 사용해야 할 경우 이미 가지고있는 GCD를 변경하지 않아도됩니다.

그러나 어떤 경우인지 확실하지 않습니다. 어쩌면 보조 전문 RunLoop (GCD로 할 수 있는지 확실하지 않지만 확실하게 스레드로 할 수 있음)을 설정해야하는 경우 일 수 있습니다. 아니면 내가 지금 생각할 수없는 특별한 경우가있을 수 있습니다.

3

OS X 또는 iOS에서 직접 NSThread/pthread API를 직접 사용할 필요는 거의 없습니다. 다른 플랫폼에서는 가능할 수도 있습니다 (GCD가 * BSD, Linux 및 Windows에 더 많이 포팅 됨 - Grand Central Dispatch의 Wikipedia 페이지 참조). 그러나 Apple OS 플랫폼에서는 거의 항상 더 나은 결과를 얻을 수 있습니다. 시스템은 스레드 수명주기 관리를 수행합니다. 자신 만의 스레드 관리를 원할 수도있는 유일한 경우는 스레드 우선 순위를 관리하고 각 스레드가 직접 수행하는 작업량의 균형을 조정하여 스레드 대기 시간을 직접 제어해야하는 고도의 실시간 시나리오입니다.

관련 문제