누군가 비동기 메서드와 Vala에 스레드를 만드는 것의 차이점을 설명 할 수 있습니까? 그리고 내 코드에서 어디에서 하나를 사용해야합니까?비동기 메서드와 스레드의 차이점은 무엇입니까?
답변
async
메서드가 주 스레드에서 실행되는 동안 스레드가 독립적으로 스케줄 가능합니다. 즉, coroutines입니다. 예를 들어, 별도의 스레드에서 소켓 읽기를 차단하면 응용 프로그램을 계속 실행할 수 있지만 async
메서드에서 이렇게하면 응용 프로그램이 차단됩니다.
스레드 및 coroutines (async
메서드)는 동일한 문제 중 일부를 해결할 수 있지만 일반적으로 다른 작업을 수행합니다. Gtk + (및 다른 많은 GUI 시스템)에서는 하나의 스레드 만 GUI 객체를 조작 할 수 있으며 GUI 객체의 이벤트는이 스레드 (일반적으로 이벤트 발송 스레드라고 함)에서 발생합니다. 다른 스레드가 GUI 항목에 액세스하려고하면 a) 잠금 절차를 거치거나 b) EDT에 메시지를 보내야합니다. 이것은 모든 스레드 간 통신에 일반적입니다 : 스레드간에 통신하거나 공유 자원을 사용하려면 잠금 및 통신이 필요합니다.
코 루틴은 EDT에서 "다른 이벤트"로 실행됩니다. 다운로드 버튼이있는 창이있는 상황을 생각해보십시오. 사용자가 버튼을 클릭하면 EDT가 버튼과 관련된 클릭 핸들러를 시작합니다. 해당 코드가 실제로 파일을 다운로드하려고 시도하면 파일 다운로드가 완료 될 때까지 GUI가 고정됩니다. 동시 루틴이 시작된 경우 버튼 처리기는 async
메서드를 시작하여 소켓을 열고 아직 준비되지 않았 음을 알립니다. 그런 다음 소켓과 콜백을 EDT의 루프 (GLib.MainLoop
)에 넣습니다. 버튼의 핸들러가 끝나고 EDT가 앉아서 X 디스플레이 또는 소켓에서 이벤트를 기다린 다음 올바른 콜백을 호출하여 처리합니다. 이를 통해 GUI 이벤트를 소켓 이벤트와 인터리브 방식으로 처리 할 수 있습니다. 그러나 한 번에 하나의 처리기 만 작동 할 수 있으므로 처리기를 빨리 완료해야하거나 응용 프로그램이 응답하지 않아야합니다.
coroutines를 사용하면 콜백의 거대한 엉망이되지만 async
메서드는 콜백을 숨겨서 그렇지 않은 경우에도 직선 코드처럼 보이게합니다.
작업이 대부분 대기 중이면 코 루틴이 올바른 선택입니다. 당신의 작업이 바쁘다면 의심 할 여지없이 스레드에 들어갈 필요가있을 것입니다. Couroines는 하나 이상의 CPU 작업을 초과 할 수 없으며 스레드는 여러 CPU에서 병렬로 실행될 수 있습니다. GLib의 coroutines도 스레드와 쉽게 섞일 수 없습니다. async
메소드가 두 스레드에서 독립적으로 작동하도록하려고하는 것은 제정신이 아닙니다. 오직 EDT 만 async
메소드를 사용합니다.
- 1. 메서드와 선택기의 차이점은 무엇입니까?
- 2. 핸들과 스레드의 차이점은 무엇입니까?
- 3. 비동기 메서드와 스레드 대기 사용
- 4. Android의 서비스와 스레드의 차이점은 무엇입니까?
- 5. 비 가상 메서드와 밀폐 메서드의 차이점은 무엇입니까?
- 6. jQuery serialize() 메서드와 JSON.stringify()의 차이점은 무엇입니까?
- 7. onManagedUpdate 메서드와 touchevent 처리의 차이점은 무엇입니까?
- 8. 메서드와 자유 함수의 미묘한 차이점은 무엇입니까?
- 9. NavigationService.Navigate() 메서드와 PhoneApplicationFrame.Source 속성의 차이점은 무엇입니까?
- 10. GetGetMethod 메서드와 GetMethod 속성의 차이점은 무엇입니까?
- 11. asp.net 웹 메서드와 wcf 서비스의 차이점은 무엇입니까?
- 12. OnLoad 메서드와 Load 이벤트의 차이점은 무엇입니까?
- 13. 작업자 스레드와 백그라운드 작업자 스레드의 차이점은 무엇입니까?
- 14. 작업자 스레드와 I/O 스레드의 차이점은 무엇입니까?
- 15. CLR 작업자 스레드와 작업자 스레드의 차이점은 무엇입니까?
- 16. CLR에서 배경과 전경 스레드의 차이점은 무엇입니까?
- 17. UI 스레드와 렌더링 스레드의 차이점은 무엇입니까?
- 18. GCD 메인 큐와 메인 스레드의 차이점은 무엇입니까?
- 19. 두 비동기 메서드의 차이점은 무엇입니까?
- 20. 스레드의 대기 비동기 메서드는 어떻게됩니까?
- 21. 정적 구조 메서드와 정적 클래스 메서드의 차이점은 무엇입니까?
- 22. 추가 정보 : 클래스 메서드와 인스턴스 메서드의 차이점은 무엇입니까?
- 23. int CompareTo 메서드와 일반 If 조건의 차이점은 무엇입니까?
- 24. Intel XDK watchAcceleration 메서드와 같은 이름의 Cordova 메서드의 차이점은 무엇입니까?
- 25. 동기 API와 비동기 API의 차이점은 무엇입니까?
- 26. 블로킹과 비 블로킹, 비동기 블로킹의 차이점은 무엇입니까?
- 27. EF에서이 두 비동기 호출의 차이점은 무엇입니까?
- 28. 비동기 개인 및 비공개 비동기의 차이점은 무엇입니까?
- 29. 비동기 메서드는 System.Net.Mail.SmtpClient의 동기화 메서드와 거의 동일한 응답 시간을 사용합니까?
- 30. 더미 스레드의 호출에서 주 스레드의 파이썬 함수 실행
이 스레드는 매우 인기가 없기 때문에, 나는 내 자신이 의견에 당신을 감사하게 할 것입니다 !!! 고마워. – Kwaadpepper