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
[51040] Re:인디10에서 LockList...
루시엘 [] 1480 읽음    2007-10-25 17:17
DoyongID 님이 쓰신 글 :
: 채팅서버에서 총 100개의 접속을 받았다고 가정하고요..
:
: 10개의 방을 만들어서 10명씩 넣었습니다. 각 방에서 채팅을 하면 10명씩한테만 메시지가 날아가겠죠..
:
: 전송할 때는 LockList를 걸어서 하는걸로 아는데, 그러면 모든 소켓이 잠기게 되는것 아닌가요?
:
: 같은 방에 있는 10명한테만 보내면 되는데, 10개의 소켓에만 Lock해도 될 것 같은데..
:
: 그렇게 할 수 있는 방법이 있나요?
:
:
: 또 하나 궁금한게 있는데, Lock이 걸려있는 상태에서는 Send, Recv 둘 다 안되는겁니까? 뭐, 아예 작업이 원천적으로 차단되는건지요..

인디의 LockList는요 내부적으로 크리티컬 섹션 (임계영역)을 사용하여 락을 겁니다.

임계영역은 말그대로 어떠한 일정 영역을 락 거는건데요

그 영향을 받는 영역이 바로 TList이고, 프로퍼티로는 Threads라는 프로퍼티이죠

이 Threads의 인디에서의 역할은 바로 세션의 생성과 삭제에서 목록을 관리하는게 주역할 이구요

만약 Threads에 LockList로 락을 걸게 되면, 인디컴포넌트는 새로운 접속이 발생하였을 때

새로운 세션을 생성하여 Threads에 세션 오브젝트(TIdPeerThread 혹은 AThread)를 추가하게 되는데,

락이 걸린 상태이므로 세션의 추가가 락이 풀릴 때까지 지연이 되지요

이해 되시는지 모르겠네요 ^^

즉 소켓(혹은 세션오브젝트)하나 하나에 락을 거는게 아니므로 세션 오브젝트 하나의 인스턴스 접근에는 LockList의 영향을 받지 않습니다. 그러므로 모든 접근(읽기, 쓰기)이 가능해지죠

세션 오브젝트하나 하나 락을 거시려며 직접 하셔야 하는데 개인적으로 이러한 로직 프로그래밍은 비추천입니다. 서버에서 임계영역이 많아 질 수록 곧 그것은 비용으로 합산됩니다.

+ -

관련 글 리스트
51035 인디10에서 LockList... DoyongID 1227 2007/10/25
51040     Re:인디10에서 LockList... 루시엘 1480 2007/10/25
51042         Re:Re:인디10에서 LockList... DoyongID 1813 2007/10/25
51045             Re:Re:Re:인디10에서 LockList... 루시엘 1324 2007/10/26
51047                 답변 감사합니다.. DoyongID 1256 2007/10/26
51036     Re:인디10에서 LockList... 초보대왕 1224 2007/10/25
51037         Re:Re:인디10에서 LockList... DoyongID 1175 2007/10/25
51038             Re:Re:Re:인디10에서 LockList... 초보대왕 1374 2007/10/25
51039                 Re:Re:Re:Re:개념이 헷갈리는 것이..^^ DoyongID 1672 2007/10/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.