음악을 재생하는 응용 프로그램을 만들고 있습니다.
재생 중에는 종종 스레드가 동시에 발생해야하기 때문에 별도의 스레드에서 발생해야합니다. 호출이 :. 예를 들어, 각자가 연주하는 자신의 스레드를 할당하도록 코드가 필요의 노트 (편집 명확히하기 위해 함께들을 수 note.play()
메모가 완료 재생 될 때까지 스레드를 정지, 나는 세 가지 필요한 이유입니다 세 개의 음이 동시에 들리도록 별도의 스레드.)
이런 종류의 동작은 음악을 재생하는 동안 많은 스레드를 만듭니다.
예를 들어 짧은 멜로디와 짧은 코드 진행을 가진 음악을 생각해보십시오. 전체 멜로디는 하나의 스레드에서 연주 될 수 있지만, 각 코드에는 3 개의 음표가 포함되어 있으므로 진행하려면 3 개의 스레드가 필요합니다.
따라서 진행을 재생하는 의사 코드는 다음과 같습니다.
void playProgression(Progression prog){
for(Chord chord : prog)
for(Note note : chord)
runOnNewThread( func(){ note.play(); } );
}
진행에 4 개의 화음이 있다고 가정하고 우리가 여는 3 notes * 4 chords * 2 times
= 24 실 보다 두 번 연주합니다 . 그리고 이것은 한 번만 재생하기위한 것입니다.
실제로 실제로 실제로 작동합니다. 대기 시간이나 그로 인한 버그는 눈에 띄지 않습니다.
그러나 이것이 올바른 방법인지 또는 근본적으로 잘못된 일인지 묻고 싶었습니다. 사용자가 버튼을 누를 때마다 너무 많은 스레드를 만드는 것이 합리적입니까? 그렇지 않다면 어떻게 다르게 할 수 있습니까?
Is it reasonable to create so many threads...
언어의 스레딩 모델에 따라 다릅니다. 병렬 처리에 사용되는 스레드는 종종 OS 수준에서 처리되므로 OS가 스레드를 여러 코어에 매핑 할 수 있습니다. 이러한 스레드는 작성하고 전환하는 데 비용이 많이 듭니다. 동시성 스레드 (두 작업을 동시에 실행하지 않아도 됨)는 언어 / VM 수준에서 구현할 수 있으며 10 개의 네트워크 소켓과 통신 할 수 있도록 매우 "저렴하게"만들어서 전환 할 수 있습니다. 동시에, 그러나 그렇게 많은 CPU 처리량을 얻을 필요는 없습니다.