C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37203] 그냥 제 생각엔...
smleelms [smleelms] 975 읽음    2004-09-10 16:48
후처리 스레드 로직을 다수로 구성하셔서, 큐의 데이터 인덱싱에 따라서 이 스레드와 저 스레드가 번갈아 처리하는 방법도 있을것 같습니다만.. 어차피 DB 트랜젝션은 DB 엔진에서 알아서 할거구요..

이조차도 못따라 잡는다면 DB 엔진의 한계가 아닐런지요.. ^^;

별 도움이 못되는 리플이네욤.. ^^;;


땅주인 님이 쓰신 글 :
: 특정한 코드에 대해서 질문 드리는 것은 아니구요...
: 전체적인 구성을 어떻게 해야 할 지 질문 드립니다.
:
: 지금 돌아가고 있는 로직은 그냥 TServerSocket의 read event에다가 처리 로직을
: 죄다 넣어서 처리하는 아주 단순 무식한 코딩을 해 놓았습니다.
:
: 대부분의 처리 로직이 소켓에서 데이터를 읽어서 DB에 필요한 내용을 INSERT/UPDATE/DELETE/SELECT하고
: 그 결과를 다시 소켓으로 쓰는 작업입니다. 소켓에 데이터가 몰리면 하나의 소켓 데이터 처리하느 동안에
: 다른 소켓의 데이터를 처리하지 못하거나 무지하게 늦게 처리되고 있습니다.
:
: 문제는 소켓에서 데이터를 읽어 오는 속도와 , 이를 처리하는 후처리 로직(주로 DB처리)간의 속도의 불균형으로
: 인한 문제을 어떻게 극복하는 가에 촛점이 맞추어집니다.
:
: 해결책으로 소켓과 메인 로직 사이에 버퍼를 두고, 메인 로직은 스레드로 구성하려 합니다.
:
:
: Socket ----------------------> Queue ---------------------> 처리 로직(thread)
:                     push()                                             pop()
:
: 생각으로는 소켓에서 데이터를 읽은 데이터를 ( 갈라져서 들어오기도 해서 pending 작업도 해야 함)
: Queue에 넣고 Thread로 TEvent 객체를 통해서 Queue에 데이터가 들어와 있음을 알리면,
: Thread는 WaitForSingleObject()로 기다리고 있다가 Event 메세지 받고 깨어나서 Queue에서 데이터를
: 빼내어 처리한다. 이런 정도로 정리가 되는데...
:
: 문제는 만약 TEvent로 Event로 알렸는데... 만약 Thread가 실행중에 있다면 이 Event 신호는 어떻게 되는 지요?
: 염려되는 것은 소켓에서 마구 들어오는 데이터로 큐를 채우고 스레드에 Evnet를 마구마구 날리면..
: 스레드가 이벤트를 까먹지 않을까 하는 염려가 돼서요....
:
: 그리고, 이러한 방법 이외에 다른 좋은 방법이 있다면 소개를 해주시면 감사하겠습니다.

+ -

관련 글 리스트
37198 [질문]소켓과 스레드의 불안한 이중주... 땅주인 1061 2004/09/10
37203     그냥 제 생각엔... smleelms 975 2004/09/10
37248         Re:그냥 제 생각엔... 땅주인 912 2004/09/13
37247         Re:그냥 제 생각엔... 땅주인 741 2004/09/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.