멀티 스레딩이 잘못되어 거의 / 실제로 실패한 프로젝트에서 어떤 교훈을 얻었습니까?
때로는 프레임 워크에 특정 스레딩 모델이 적용되어 일을 처리하기가 더 어려워집니다.
나에 관해서는, 나는 마지막 실패에서 아직 회복하지 못했고 그 프레임 워크에서 멀티 스레딩과 관련된 것을 다루지 않는 것이 낫다고 생각합니다.
포크 / 조인이 간단하고 데이터가 한 방향으로 만 이동하는 (스레딩이 원형 방향으로 이동하는) 멀티 스레딩 문제에 능숙하다는 것을 알았습니다.
일부 작업은 엄격하게 직렬화 된 스레드 ( "주 스레드")에서만 수행 될 수 있고 다른 작업은 기본 스레드 ( "작업자 스레드") 이외의 스레드에서만 수행 될 수있는 GUI를 처리 할 수 없습니다. 데이터와 메시지는 N 구성 요소 (완전히 연결된 그래프) 사이에서 모든 방향으로 이동해야합니다.
그 프로젝트를 다른 프로젝트로 떠났을 때 교착 상태 문제가 도처에있었습니다. 2-3 개월 후 다른 여러 개발자들이 교착 상태 문제를 모두 해결하여 고객에게 배송 할 수있을 정도로 개선했다고 들었습니다. 나는 부족한 지식이 없다는 것을 결코 알지 못했습니다.
프로젝트에 관한 것 : 메시지 ID의 수 (스레딩에 관계없이 다른 객체의 메시지 큐로 전송 될 수있는 이벤트의 의미를 설명하는 정수 값)는 수천으로 나옵니다. 고유 한 문자열 (사용자 메시지)도 약 천 개에 이릅니다.
추가
다른 팀 (내 과거 또는 현재 프로젝트와 무관)에서 얻은 가장 좋은 비유는 "데이터를 데이터베이스에 넣는 것"이었습니다. (중앙 집중화 및 원자 업데이트를 참조하는 "데이터베이스") 모두 동일한 "메인 스레드"에서 실행되는 여러보기로 분할되고 GUI가 아닌 무거운 리프팅은 개별 작업자 스레드에서 수행됩니다. 데이터베이스처럼 작동하는 단일 plase에 저장되고 "데이터베이스"가 사소한 데이터 종속성과 관련된 모든 "원자 업데이트"를 처리하도록합니다. GUI의 다른 모든 부분은 화면 그리기 만 처리합니다. UI 부분은 물건을 캐시 할 수 있으며 제대로 설계 된 경우 1 초가 지나면 사용자가 알지 못합니다. 이 "데이터베이스"는 "문서"라고도합니다. 문서보기 아키텍처. 불행히도-아니요, 내 앱은 실제로 모든 데이터를 Views에 저장합니다. 왜 그런지 모르겠습니다.
동료 기고자 :
(기여자는 실제 / 개인적인 예를 사용할 필요가 없습니다. 일화적인 예에서 얻은 교훈은 자신이 신뢰할 수 있다고 판단되면 환영합니다.)