0

저는 현재 여러 컴퓨터에서 병렬 렌더링을 관리하는 응용 프로그램을 프로그래밍하고 있습니다. 이를 위해 서버 응용 프로그램에 모든 질문에 대해 하나의 스레드 인 TCP 연결을 관리하는 스레드 풀이 있습니다. 네트워크 스레드 중 하나가 데이터를받은 경우 다른 스레드에 경고하기 위해 모든 TCP 스레드에서 동일한 조건 변수를 사용하고 싶습니다.조건 변수 (POSIX 동시 API)를 사용하면 실제로 병렬 네트워크 코드가 느려질 수 있습니까?

문제점 : POSIX API에서 signal 함수를 사용하려면 뮤텍스를 사용해야합니다. 즉, 2 개의 네트워크 스레드가 동시에 데이터를 수신하면 mutex가 실행을 계속하기 위해 자유롭게 될 때까지 기다려야합니다.

현실적으로이 조건 변수를 사용하면 코드가 실제로 느려 집니까? 또한, 만약 내가 그것을 사용하고 싶지 않다면, 다른 스레드 (조건 변수에 wait을 호출하는 사람)에서 while 루프를 통해 내 네트워크 스레드가 무언가를 받았는지 확인하는 명령을 만들 수 있습니다.

고맙습니다. :)

답변

0

아마도 그렇지 않습니다. 뮤텍스를 잠그고 상태 변수에 신호를 보내면 뮤텍스로 보호 된 작업 대기열에서 다음 항목을 가져 오는 것보다 나쁘지 않습니다.

이론적으로 조건 변수에 대한 대기를 플래그를 폴링하는 while 루프로 바꿀 수 있지만이 플래그에 액세스 할 때 적절한 동기화 (메모리 장벽)를 사용해야합니다. 이것은 또한 비용으로 올 것입니다. 바쁜 대기는 여러 가지 이유로 이상적이지 않으며, 수면을 추가하면 지연이 발생할 것입니다.