2010-05-17 8 views
2

신참 질문을 사이에 통신
- 어떻게 부모가 효율적으로 몇 가지 작업을 할 수을 아이들 을 경고 할 수 있습니다 ..?
- 또는 부모 신호가 어떤 작업을 시작하기를 아이들이 어떻게 기다릴 수 있습니까?
부모와 자식

EDIT :
이 프로그램은 복잡한 계산을 병렬로 시도합니다. 이미 공유 메모리를 모든 자식이 결과 및 데이터 전송을위한 공통 작업 공간으로 사용했습니다.
내가 부모가 ... (라고 여러 번)

감사

말을 모든 아이들에게 효율적으로 "시작"지금 필요한 것은

답변

4

귀하의 ipc 태그는 모든 것을 말한다. 프로세스 간 통신을 조사해야합니다.

  • 공유 메모리.
  • 세마포어.
  • 파이프.
  • 신호.
  • 메모리 매핑 파일.
  • 소켓.

의심 할 여지없이 다른 가능성이 있지만 좋은 시작입니다.

얼마나 효율적인은 사용 사례에 따라 다릅니다. 아이에게 무언가를하도록 알릴 필요가 있다면 신호는 아마도 내가 사용하는 것일 것입니다. 프로세스간에 좀 더 많은 정보를 전송해야하는 경우 요구 사항을 완전히 지정하는 것이 좋습니다. 당신이 고려할 수 있습니다


것은 모두 모든 프로세스 간 물건을 무시하고 단지 스레드를 사용하는 것입니다. 적어도 Linux에서는 스레드가 스케줄러의 일급 시민입니다. 오래된 UNIX는 (사용자 모드 스레드와) 구분할 수 있지만 Linux에서는 그렇지 않습니다.

나는 이렇게하는 것이 더 간단하고 정보는 자동으로 공유된다는 것을 알았습니다. (여전히 뮤텍스 등으로 공유 된 콘텐츠를 보호해야한다는 것을 명심하십시오.)


이미 공유 메모리를 사용하려는 경우 신호를 사용하는 것이 좋습니다. 각 어린이 (그리고 그들이 어디에 있는지 알고 있음)에 대한 기억 영역을 따로 설정했다고 가정하면 신호는 아마도 병렬 작업을 위해 많은 어린이들에게 알리는 가장 빠른 방법 일 것입니다.

자녀가 select 루프에서 기다리는 경우 (예 : 정기 작업을 수행하는 데 30 초 시간 초과) 신호가 발생하면 EINTR으로 즉시 종료됩니다. 즉각적인 응답을 제공하면서 효율적인 CPU 사용을 제공합니다.

+0

효율적인 방법을 찾고 있습니다.이 경우 소켓 오버 헤드가 효율적이라고 생각하지 않습니다. – Betamoo

+0

@Betamoo, 업데이트를 참조하십시오. 귀하의 _specific_ 필요에 따라 다릅니다. 그리고 소켓은 충분히 빠르다. 구현에 달려있다. 데이터는 로컬 소켓을 위해 전선을 통해 나가야 할 필요가 없습니다. – paxdiablo

+0

편집하십시오. – Betamoo

1

어떻게 작동하는지 이해하려면 Beej의 IPC 안내서를 참조하십시오. 훌륭한 가이드입니다. Beej는 동일한 사이트에서도 소켓을 커버합니다.

관련 문제