7

UI 스레드에서 UI 요소를 항상 만들어야하거나 업데이트해야하는 이유는 무엇입니까?UI 요소에서 항상 UI 요소를 생성/업데이트해야하는 이유는 무엇입니까?

거의 모든 프로그래밍 언어 UI 요소는 UI 스레드에서만 안전하게 액세스하거나 수정할 수 있습니다. 표준 동시 액세스 및 동기화 문제 인 것으로 알고 있지만 실제로 필요한 것입니까? 이 동작은 프로그래밍 언어 또는 운영 체제에서 부과됩니까? 이 상황이 다른 프로그래밍 언어가 있습니까?

답변

9

이것은 그래픽 프레임 워크에 의해 부과되는데, 종종 운영 체제가 제공하는 것은 아닙니다.

기본적으로 모든 것을 "적절하게 스레드 안전"으로 만드는 것은 비효율적입니다. UI 스레드로 호출을 마샬링해야하는 것은 당연한 일이지만 잠금 등 걱정할 필요없이 UI 스레드 자체가 이벤트를 매우 빠르게 처리 할 수 ​​있습니다.

+0

프레임 워크가 처음에는 안전하지 않은 방식으로 누군가를 호출하는 위험을 감수하는 대신 호출 자체를 확인하고 마샬링하는 것이 더 쉽지 않을까요? 닷넷 프레임 워크는 적어도 우리를 위해 그것을 할 수 있었다 ... – ak3nat0n

+0

나는 말할 것이다. 텍스트 상자의 Text 속성에 전화를 걸면 바로 지금 바로 설정됩니다. 핸들링을 프레임 워크로 푸시하면 대다수의 업데이트가 UI 스레드 자체에서 오는 경우에도 * 모든 호출이 해당 페널티에 의해 바인딩됩니다. – jasonh

+0

@ zaladane : UI 스레드에서 코드를 실행해야하는시기를 (자동으로) 결정하기가 쉽지 않을 수도 있습니다. UI 스레드에서 코드의 특정 부분을 실행하려면 언어에서 구문을 선호합니다 (안전하지 않은 키워드와 비슷할 수 있음). Dispatcher 코드를 읽는 것이 더 쉬울 것입니다. – Zyphrax

6

전체 UI 스레드로부터 안전합니다. 스레드가 UI를 업데이트해야하는 (상대적으로 드문 경우) 경우에는 프로그래머가 동기화하는 것이 더 좋습니다.

5

UI 프레임 워크가 그렇게 설계 되었기 때문입니다. 이론적으로는 진정으로 멀티 스레드 인 UI 프레임 워크를 설계 할 수 있지만 교착 상태를 피하기는 어렵습니다.

Graham Hamilton은 주 Java UI 프레임 워크 인 Swing을 참조하여 이에 대한 멋진 기사를 작성했습니다.

관련 문제