귀하의 회사는 멀티 스레딩을 사용하지 않아야한다고 생각합니다.
대규모 멀티 스레드 프로젝트를 수행 한 후 두 가지 기술이 작동하는 데 중요하다는 것을 알았습니다. 먼저 코드를 올바르게 작성해야했습니다. 모든 필드는 수동으로 검사하여 참조 된 곳에서 올바르게 선언되고 올바르게 동기화되었는지 확인해야했습니다. (경고 : 나는 대답을 짧게 또는 더 짧게 유지하기 위해 여기에서 약간을 단순화하고 있습니다.) 둘째 , 단일 및 멀티 코어 머신 에서 코드를 평평하게 실행하여 코드를 테스트해야했습니다. 각 코어의. (그리고 그것이 나에게 자주했던 것처럼 각 코어의 2 % 만 사용하면 버그이기도합니다.)
이를 관리 할 수는 있지만 조직은 관리 할 수 없습니다. 그들이 모르는 문제를 이해하더라도 전문 지식이 없습니다.
대부분의 언어는이를 피할 수있는 방법을 제공합니다. 일반적으로 자체 스레드가있는 소켓 리더가있는 경우 가능한 빨리 기본 스레드에 정보를 가져 오십시오. 더 나은 방법은, 읽기의 스레드 부분을 처리 할 시스템 클래스 / 함수를 찾는 것입니다. 대부분의 GUI API처럼 "이벤트"를 차례로 실행하는 큐를 사용하십시오. (이 문제에 대해서는 GUI API의 이벤트 큐 자체를 사용하십시오.) 병렬 처리가 필요한 경우 데이터 / 필드를 단일 스레드로 유지하여 모든 전송을 처리 할 수있는 일종의 "작업자 스레드"를 찾을 수 있습니다.
멀티 스레딩의 모든 위험에 중점을 둡니다. (무서운 이야기 : 내가 좋아하는 버그는 다음과 같은 두 줄과 관련이 있습니다. int i = 5; i = i * i;, i35의 값을 얻었 습니다 . 많이 본 것 중 하나 if (thing != null) thing.reset();는 null 포인터 예외를 던지는 것입니다.) 완전히 새롭고 이상한 세계로 발을 디딘다면 아마도 한 걸음 물러서야 할 것입니다.
멀티 스레딩 을 어떻게 처리 해야하는지 잘 모르겠습니다 . 한 사람에게 직업을 줄 수 있고 그들이 실패 할 때 버리는 모든 것은 괜찮습니다. 그러나 팀은 가장 약한 멤버만큼 강할 것이며, 훌륭한 프로그래머조차도 본격적인 멀티 스레딩에 어려움을 겪을 것입니다. 사람들이 언어를 안전하게 만들 수있는 방법을 찾길 바랍니다. 유용한 소프트웨어가 몇 가지 있습니다. 그러나 실행 시간이 중요 하고 우수한 프로그래머 또는 검증 된 팀을 사용할 수 없다면 멀티 스레딩을 피하는 것이 가장 좋습니다 .