구현에있어 POSIX를 염두에두고 있습니다 만,이 질문은 아키텍처에 관한 것입니다.영구 다중 스레드를 설정하고 관리하는 방법은 무엇입니까?
몇 가지 주요 작업이있는 업데이트 루프부터 시작합니다. 이러한 작업을 공통 메모리 액세스 요구 사항이있는 4 ~ 5 가지 주요 작업으로 그룹화 할 수 있습니다. 이러한 작업을 자신의 스레드로 나누어 "업데이트"의 한주기를 완료하고 다음 프레임까지 잠자기하는 것이 좋습니다.
하지만 동기화하는 방법은 무엇입니까? 각주기의 시작시에 네 개 또는 다섯 개의 쓰레드를 분리하면, 한 번 실행하여 죽게 한 다음 각 패스에서 다른 4-5 개의 쓰레드를 분리하십시오. 그것은 비싸게 들린다.
이러한 스레드를 한 번 생성하면 동기화 된 호출이 깨어날 때까지 잠자기 상태가됩니다.
현명한 접근입니까? 나는 아이디어만으로 어떤 종류의 구현에 대한 응답을 받아 들일 수 있습니다.
편집 : 지금까지 응답에 따라, 나는 추가 할 :
- 동시성
- 을 원하는 이들 작업자 스레드가 매우 짧은 기간 <은 250ms
- 작업에서 실행하기위한 것입니다 각 스레드에 의해 수행됩니다 항상 동일합니다
- 난 4-5 스레드를 고려 중이 야, 20 하드 제한되는.
안녕하세요. 나는 이것이 나의 필요에 대한 합리적인 접근법처럼 들린다 고 생각한다. 나는 이것에 12 스레드 지나서가는 자신을 보지 못한다. 특히 N이 너무 커지면 스레드를 통합 할 수있는 옵션이 있기 때문에 특히 그렇습니다. 이 구현에서 작업자 스레드는 항상 활성이지만 세마포 만이 코드를 래핑 할 것인가? 또는 posix 라이브러리가 스레드를 일시 중지 (잠자기) 한 다음 세마포어에서 스레드를 다시 활성화하겠습니까? 컨트롤러 루프는 단순히 세마포어의 상태를 설정합니다. 맞습니까? – bitcruncher
"활성"이라는 것이 무슨 뜻인지 모르겠습니다. 세마포어를 기다리면 세마포어가 증가 할 때까지 스레드가 잠자기 상태가됩니다. 스레드는 세마포어가 해제 될 때까지 CPU 또는 스케줄러 리소스를 소비해서는 안됩니다. 컨트롤러 스레드는 세마포어의 상태를 설정하기위한 것입니다. 약간의 복잡성으로 인해 스레드는 제거 될 수 있지만 복잡성은 적이며 대개 스레드가 수행 할 다른 것이 있습니다. :) –