스택 오버플로가 발생했습니다. WPF 및 기본 C# .NET 소켓 통신을 활용하는 비디오 처리 시스템에서 작업하고 있습니다. 각 클라이언트는 처리를 위해 초당 30 프레임의 비디오 데이터를 LAN 환경의 서버로 전송합니다. 일부 처리는 서버로드를 줄이기 위해 각 클라이언트에서 처리됩니다.스레드 통신 및 객체 오버 헤드
하드웨어 제한이 절대로 우려되지 않는 환경에서 프로그래밍을 배웠습니다. 비디오가 변경됩니다 .. "Hello World"는이 말을하기 위해 내가 최소한 준비하지 못했습니다. 이 두 가지 방법 중 하나를 구현하는 것은 심각한 문제가 아닙니다. 내가 시간과 힘을 쏟아야하는 것은 내가 도움이 필요한 곳이다.
나는 두 가지 옵션이 가정 하드웨어는 가능한 한 실시간 결과에 가까운 생산에서 클라이언트를 제한합니다 (그러나 제안을 오픈!) :
--Queued Client-- 클라이언트는 비디오 프레임의 큐를 처리합니다. 각 프레임은 처리 된 다음 TCP 패킷을 통해 추가 분석을 위해 서버로 전송됩니다. 이 시스템은 센서 캡처 순서대로 한 번에 하나의 프레임 만 처리하고 정적 소켓 클라이언트를 통해 서버로 전송합니다. *이 시스템은 최신 멀티 코어 하드웨어를 활용하지 못합니다.
- 스레드 클라이언트 - 클라이언트는 스레드 된 (배경 작업자) 처리 및 각 프레임의 서버로의 전송을 사용합니다. 각각의 새로운 프레임은 새로운 처리 스레드뿐만 아니라 새로운 네트워크 통신 클래스의 인스턴스 생성을 트리거합니다. *이 시스템은 최신 하드웨어를 사용하지만 심각한 타이밍 문제가 발생할 수 있습니다.
내 문의의 핵심은 스레드 통신이 대부분 순서대로 통신을 생성합니까? 이미 서버 측의 클라이언트간에 비디오 프레임을 동기화 할 계획입니다 ... 그러나 데이터 전달은 새로운 문제를 만들 정도로 너무 멀어 질 것입니다. 이것이 로컬 네트워크를 통한 통신이라는 것을 상기하십시오.
새로운 소켓 통신 클래스 및 새로운 (단순한) 비디오 처리 클래스를 인스턴스화하면 각 프레임을 대기열에 두거나 병렬로 처리하지 않아도되는 오버 헤드가 발생합니까?
코드가 막 시작합니다. 클라이언트 시스템의 하드웨어는 알려지지 않았기 때문에 성능을 결정할 수 없습니다. 개발을 어떻게 진행 하시겠습니까?
저는 대학생입니다. 그러한 모든 정보는 제 지식을 처음으로 실제 적용 할 때 도움이됩니다.
다음을 읽으십시오. http://msdn.microsoft.com/en-us/library/ff963548.aspx 여기에는 귀하의 사례와 관련된 많은 정보가 들어 있습니다. 귀하의 경우에는 패럴ism이 완벽하게 합리적입니다. 이미지를 업로드하고 소스에서 검색하는 데는 상당한 시간이 걸리기 때문에 이러한 작업을 격리 된 상황 (스레드)에서 완벽하게 오프로드 할 수 있습니다. 주어진 링크를 읽고 동기화를 위해 귀하의 경우에 훌륭한 제작자/소비자 수집을 찾으십시오. – Polity
파이프 라이닝이 좋게 들리고 비슷한 순서로 실행 시간이있는 스테이지의 경우 소리가납니다. 불행히도 비디오 스트리밍 및 프로세싱에는 종종 CPU로드 측면에서 우세한 단계가 있습니다. 이것은 효과적으로 파이프의 좁은 부분 인 병목 현상입니다. 이 단계에서 여러 개의 좁은 파이프를 사용할 수없는 한, 사용 가능한 여분의 좁은 파이프가 있더라도 스트림이 중단됩니다. –