리눅스에서 ACE를 관련하여 Reactor 패턴을 구현을 할때 대부분 ACE_Dev_poll_Reactor에 관심을
많이 가질것이다. 왜냐 하면 하면 리눅스 2.4 이상의 커널에서 ACE를 빌드를 할때 ACE_HAS_EVENT_POLL 를 추가하면 리눅스에서 IOCP에 필적하는 Epoll을 사용 할 수 있기 때문이다. 물론 IOCP 자체가 Proactor 기반이고 Epoll은 Reactor 기반인지라 비교 하기에는 무리가 있기는 하지만.. 어차피 리눅스 자체가 Reactor에 최적화가 되어 있고 윈도우는 Proactor에 최적화 되어 있는
각 운영체제에서 최고의 효율을 낸다는 사실에서 비견을 할만하다.
하지만 ACE_TP_Reactor은 내부적으로 리더/팔로우 패턴으로 쓰레드 풀을 사용 되어 있다고 한다.
그런데 ACE_Dev_Poll_Reactor을 확인 하여 보았을때 이 역시 내부적으로 쓰레드풀을 사용하는지
아니면 Epoll 관련 함수가 자체적으로 Thread Safe해서인지 TP_Reactor 과 마찬가지로
run_reactor_events_loop를 복수의 쓰레드를 통해서 사용되어도 문제가 없는거 같다.
내부의 Handle_Event 함수도 쓰레드 세이프하게 되어 있고. Owner 내부에서도 사용되지를 않는데
마음놓고 TP_Reactor와 똑같은 방식으로 사용을 하면 될 듯 합니다.
또한 구글 검색에서 건졌는데 ACE의 창시자 더글라스 교수님이 친절한 답변도 볼 수 있었습니다 :D
Hi Rafi, > A small question. May Dev_Poll_Reactor be driven by > multiple-threads simultaneously, or something like TP_Reactor is > needed? You can use multiple threads. BTW, to ensure that we have proper version/platform/compiler information, please make sure you fill out the appropriate problem report form (PRF), which is in $ACE_ROOT/PROBLEM-REPORT-FORM $TAO_ROOT/PROBLEM-REPORT-FORM or in $ACE_ROOT/BUG-REPORT-FORM $TAO_ROOT/BUG-REPORT-FORM in older versions of ACE+TAO. Make sure to include this information when asking any questions about ACE+TAO since otherwise we have to "guess" what version/platform/compiler/options you've using, which is very error-prone and slows down our responsiveness. If you don't use the PRF, therefore, it is less likely that someone from the core ACE+TAO developer team will be able to answer your question. Naturally, we encourage and appreciate other members of the ACE+TAO user community who can respond to questions that they have the answers to. Thanks, Doug -- Dr. Douglas C. Schmidt Professor and Associate Chair Electrical Engineering and Computer Science TEL: (615) 343-8197 Vanderbilt University WEB: www.dre.vanderbilt.edu/~schmidt Nashville, TN 37203 NET: d.schmidt@xxxxxxxxxxxxxx |
P.S 그런데 ACE 5.7에서 Dev_Pool_Reactor과 관련하여 쓰레드 안정성에 대해 FIX 하였다는 글을 본 적이 있었는데 아무튼.. 왠만하면 Dev_Poll 에서 멀티 쓰레드를 사용할려면 5.7 이상 사용하시는게 좋을 듯 합니다.
'C++ > ACE' 카테고리의 다른 글
초간단 도메인으로 IP 주소 얻기 (0) | 2014.09.16 |
---|---|
플랫폼 독립적인 설정파일 로딩 로직 (0) | 2014.09.16 |