2009-12-10 12 views
1

상위 프로세스는 여러 프로세스를 미리 설정하고 각 preforked 프로세스는 생성 된 스레드 수 (스레드 풀)를 생성합니다. 동일한 주소 공간에있는 모든 스레드는 데이터를 공유 할 수 있으며 중요한 섹션에 대해 서로 다른 동기화 기술을 사용할 수 있습니다. 다른 주소 공간에있는 스레드간에 동기화하는 방법을 알고 싶습니다. 나의 초기 생각 (내가 틀릴 수도 있음)은 공유 메모리를 사용하고 동기화를 위해 세마포어를 사용하는 것이다. 이 설계는 세마포어/뮤텍스를 두 가지 많이 사용합니다.다중 프로세스 및 다중 스레드 디자인

문제를 극복하기위한 더 좋은 디자인이 있습니까? 나는 아파치 2.0이 하이브리드 다중 프로세스와 멀티 쓰레드 서버 디자인을 사용한다는 것을 알고있다. 하이브리드 접근법에 대한 해골 코드 아이디어가 있다면 도움이 될 것입니다. 확장 성 및 견고성에 초점을 맞추고 있습니다.

답변

2

저는 일반적으로 하나 또는 여러개의 포크에 붙어 있고 프로세스 간 IPC (공유 메모리, 파이프, 소켓 등) 또는 스레드를 사용하고 메모리 구조를 통해 통신합니다. 포크와 스레드를 섞어서 뭔가를 사지 않는 한, 하나 따기와 함께 실행하는 것이 좋습니다.

2

두 개의 스레드간에 동기화가 필요한 경우 일반적으로은 주소 공간을 공유하지 않기 때문에 동일한 파일의 동일한 영역에서 작업하기 때문입니다.

flock() (더 세밀한 변형 fcntl())이 문제를 해결할 수 있습니다.

동일한 데이터베이스 테이블에서 작업 중이기 때문에 DBMS 트랜잭션을 사용하십시오.