다른 스레드를 만들고 터치 이벤트 또는 UI와 관련된 모든 것을 수신하는 런 루프를 시작할 수 없습니까? 멀티 스레드 환경에서 UI 작업을 처리하기위한 연구가 진행되고 있습니까?메인 스레드에서 모든 UI 관련 작업을 수행해야하는 이유는 무엇입니까?
답변
UIKit는 내부적으로 스레드로부터 안전하지 않습니다.
내가 더 설명해야한다고 생각하지만 실제로는 전체 답변입니다. 애플 밖에는이 분야에 대한 연구가 없다. 애플 만이 UIKit을 유지하기 때문이다. UIKit을 스레드 안전성을 위해 대량으로 재 작성하는 것은 거의 불가능합니다. 그렇게함으로써 부과 할 수있는 상당한 성능 저하는 물론입니다. 문서에서 달리 명시하지 않는 한 주 UI에서 모든 UI 이벤트 및 주 컨텍스트 그리기 작업을 수행해야합니다.
아마도 조금 더 가치가 있습니다. 값이 멀티 스레드 UI에입니다. 각 픽셀은 한 번에 한 가지만 표시 할 수 있습니다. 전기 용량 터치 센서는 한 번에 하나의 신호 만 보낼 수 있습니다. UI는 하나뿐입니다. concurrency and/or parallelism의 약속은 내가 문제를 동시에 더 잘 추론 할 수 있거나 병렬 하드웨어를보다 잘 사용할 수 있다는 것입니다. 나는 실제로는 두 가지를 동시에 그릴 수 없다. 화면이 하나뿐입니다. 궁극적으로 나는 한 가지를 그립니다. 하루가 끝날 무렵 커브가 한 장의 그림이됩니다. 그것은 하나의 것으로 합성되고 그려집니다. 이것은 계산 작업과는 대조적입니다. 실제로는이 동시에 병렬로 두 개의 베 지어 곡선을 계산하고 하드웨어를 더 많이 사용할 수 있습니다. 그리고 그것은 제가 오늘날 다른 스레드에서 할 수있는 것입니다.
이것은 UIKit 내부에 병렬 처리가 없다는 것을 의미하지는 않습니다. 소프트웨어와 하드웨어 모두에 있습니다. 그러나 UI 처리를 위해 재진입 API를 제공하는 데 따르는 높은 복잡성과 성능 비용을 감안할 때 중요한 가치는 없습니다. 또한 UI는 사용자가 가질 수있는 가장 안정적인 기능이며, 가변적 인 상태는 다중 스레드 코드의 적입니다. UI 코드는 가치가 있다고하더라도 특히 재진입 및 스레드 안전성을 확보하기가 어렵습니다. 이는 많은 플랫폼에서 거의 사실입니다.
하지만 다른 기술에서는 이것이 새로운 것이 든 오래된 것이 든, UI 작업을위한 멀티 스레딩은 지원되지 않습니다. 성취하기가 어렵습니까? 전혀 성취 할 수 없습니까? – Anshu
이것은 매우 오래되었지만 유용 할 수 있습니다. https://community.oracle.com/blogs/kgh/2004/10/19/multithreaded-toolkits-failed-dream – Anshu