2009-04-17 7 views
2

나는 매우 비싸지 만 모두 자체적으로 포함 된 일련의 작업을 가지고 있습니다. 그들 중 일부는 "전역"상태 나 데이터에 의존하지만 모두 읽기 전용입니다. 모든 작업을 병렬로 수행 할 수 있지만 프로그램이 특정 시점을 지나기 전에 모든 작업을 완료해야합니다.스레드를 잘 사용하고 있습니까?

여기에서 멀티 스레딩의 추가 작업과 위험을 추가하는 것이 가치가 있습니까? 특히 메인 스레드가 차단하고 기다려야하므로 특히 그렇습니까?

다른 문제는이 응용 프로그램이 Windows와 Linux에서 모두 실행되어야하며 두 가지 스레딩 시스템을 사용하는 코드를 추가하는 것이 중요하지 않은 것입니다.

답변

4

작업자 스레드가 병렬화 이점을 얻지 못하는 일부 병적 인 경우가 아니면 직렬 병렬 처리보다 병렬 처리가 더 빠를 것입니다. 따라서 가치있는 것인지 여부에 대한 질문은 얼마나 많은 시간을 절약 할 수 있는지, 그리고 상황에 따라 얼마나 가치가 있는지에 대한 것입니다. 마우스 클릭으로 무언가를하기를 기다리는 노여움 사용자가있는 경우 10 초 중 5 분을 저장하는 것이 의미있는 이점입니다. cron 일에있는 동일한 저축, 순전히.

뭔가 유용한 기능이 있다고 생각되는 경우 빠른 테스트 버전을 만들고 프로파일을으로 작성하십시오.

5

글쎄, 첫 번째 질문은 : 실제로 문제가 있습니까?

확실히 합리적이고 안전하고 효율적으로 병렬 처리 할 수있는 것처럼 들리지만 실제로는 문제이 연속으로 실행될 때까지 기다리지 않으면 걱정할 필요가 없습니다.

예를 들어 밤새 실행되는 일괄 처리 응용 프로그램 인 경우에는 그럴 가치가 없습니다. 그러나 이것이 사용자 대면 응용 프로그램이고 사용자가 대기 상태에 지긋 지긋한 경우에는 문제를 해결하기 위해 멀티 스레딩을 사용하는 것이 좋습니다.

+1

+1 : 불필요한 부분을 추가하지 마십시오. 스레드 된 코드의 추가 유지 관리로 인해 성능이 약간 향상 될 수도 있습니다. –

+0

조숙 한 최적화는 모든 악의 뿌리입니다. Donald Knuth – MattH

+0

고마워요.하지만 실제로는 조금 문제가 있거나 물어 보지 않았을 것입니다. 스레드가 나를 조금 놀라게하기 때문에 나는 의견을 모으고있다. 나는 다른 사람들이이 시나리오에서 사용하는 것이 가치 있다고 생각하는지 궁금해했다. –

2

설명하는 내용은 동시 처리 용어로 Barrier이며 많은 유형의 응용 프로그램에서 널리 사용됩니다.

응용 프로그램에 적합한 지 여부는 자세한 내용 없이는 말하기 어렵습니다.

+0

적어도 이미 수행 한 기본 테스트에는 확실한 이점과 명확한 속도 증가가 있습니다. 그러나 Win32와 Linux 모두에서 스레드를 사용하는 강력한 솔루션을 만드는 것을 정당화하기에 충분할 지 궁금합니다. –

1

멀티 코어 프로세서를 사용하면 스레드를 동시에 실행하고 병렬 처리를 통해 속도를 높일 수 있습니다.

그러나 스레드의 주된 용도는 사용자 입력이나 I/O 완료와 같은 외부 이벤트를 기다리는 것과 관련된 여러 논리적 체인의 동작을보다 쉽게 ​​작성할 수 있다고 생각합니다.

관련 문제