UI 스레드에서 UI 요소를 항상 만들어야하거나 업데이트해야하는 이유는 무엇입니까?UI 요소에서 항상 UI 요소를 생성/업데이트해야하는 이유는 무엇입니까?
거의 모든 프로그래밍 언어 UI 요소는 UI 스레드에서만 안전하게 액세스하거나 수정할 수 있습니다. 표준 동시 액세스 및 동기화 문제 인 것으로 알고 있지만 실제로 필요한 것입니까? 이 동작은 프로그래밍 언어 또는 운영 체제에서 부과됩니까? 이 상황이 다른 프로그래밍 언어가 있습니까?
UI 스레드에서 UI 요소를 항상 만들어야하거나 업데이트해야하는 이유는 무엇입니까?UI 요소에서 항상 UI 요소를 생성/업데이트해야하는 이유는 무엇입니까?
거의 모든 프로그래밍 언어 UI 요소는 UI 스레드에서만 안전하게 액세스하거나 수정할 수 있습니다. 표준 동시 액세스 및 동기화 문제 인 것으로 알고 있지만 실제로 필요한 것입니까? 이 동작은 프로그래밍 언어 또는 운영 체제에서 부과됩니까? 이 상황이 다른 프로그래밍 언어가 있습니까?
이것은 그래픽 프레임 워크에 의해 부과되는데, 종종 운영 체제가 제공하는 것은 아닙니다.
기본적으로 모든 것을 "적절하게 스레드 안전"으로 만드는 것은 비효율적입니다. UI 스레드로 호출을 마샬링해야하는 것은 당연한 일이지만 잠금 등 걱정할 필요없이 UI 스레드 자체가 이벤트를 매우 빠르게 처리 할 수 있습니다.
전체 UI 스레드로부터 안전합니다. 스레드가 UI를 업데이트해야하는 (상대적으로 드문 경우) 경우에는 프로그래머가 동기화하는 것이 더 좋습니다.
UI 프레임 워크가 그렇게 설계 되었기 때문입니다. 이론적으로는 진정으로 멀티 스레드 인 UI 프레임 워크를 설계 할 수 있지만 교착 상태를 피하기는 어렵습니다.
Graham Hamilton은 주 Java UI 프레임 워크 인 Swing을 참조하여 이에 대한 멋진 기사를 작성했습니다.
프레임 워크가 처음에는 안전하지 않은 방식으로 누군가를 호출하는 위험을 감수하는 대신 호출 자체를 확인하고 마샬링하는 것이 더 쉽지 않을까요? 닷넷 프레임 워크는 적어도 우리를 위해 그것을 할 수 있었다 ... – ak3nat0n
나는 말할 것이다. 텍스트 상자의 Text 속성에 전화를 걸면 바로 지금 바로 설정됩니다. 핸들링을 프레임 워크로 푸시하면 대다수의 업데이트가 UI 스레드 자체에서 오는 경우에도 * 모든 호출이 해당 페널티에 의해 바인딩됩니다. – jasonh
@ zaladane : UI 스레드에서 코드를 실행해야하는시기를 (자동으로) 결정하기가 쉽지 않을 수도 있습니다. UI 스레드에서 코드의 특정 부분을 실행하려면 언어에서 구문을 선호합니다 (안전하지 않은 키워드와 비슷할 수 있음). Dispatcher 코드를 읽는 것이 더 쉬울 것입니다. – Zyphrax