[Tip,C#] 간단히 만들어보는 메시지 처리 구조 2 > IT Tip&Tech

본문 바로가기
사이트 내 전체검색


회원로그인

IT Tip&Tech

[Tip,C#] 간단히 만들어보는 메시지 처리 구조 2

페이지 정보

작성자 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일19-10-11 12:21 조회236회 댓글1건

본문

이전에 만들었던 코드는 Manager 클래스에서 메시지 큐처리를 맡고 단일 스레드에서 처리하기 때문에 어느 한 객체에서 메시지 처리에 지연이 발생하면 모두 영향을 받게 됩니다.

메시지 전송에는 동시성이 확보되지만 해당 메시지를 처리하는 부분에서는 동시성이 확보되질 못 합니다.

따라서 메시지 큐처리를 개별 구독 객체 단위로 처리하도록 바꿔 줍니다.

이렇게 하면 객체 단위로 지연 확산이 격리가 되고 동시성을 확보할 수 있습니다.

 

abstract class SubscribeBase : IDisposable

{

bool disposed = false;

    readonly ConcurrentQueue<IMessage> messageQ = new ConcurrentQueue<IMessage>();

    readonly EventWaitHandle msgEvent = new EventWaitHandle(false, EventResetMode.AutoReset);

    CancellationTokenSource cts;

    Task msgProc;

 

    protected SubscribeBase()

    {

cts = new CancellationTokenSource();

msgProc = Task.Factory.StartNew(MsgProc);

    }

~SubscribeBase()

{

Dispose(false);

}

........

void MsgProc()

{

while (cts.IsCancellationRequested == false)

{

msgEvent.WaitOne();

if (cts.IsCancellationRequested)

{

return;

}

while (messageQ.TryDequeue(out var m))

{

......

}

}

}

.........

 

}

Manager 클래스는 Send 호출시 바로 Map 을 뒤져서 해당 구독객체의 메시지 큐에 메시지를 밀어넣습니다.

public void Send(IMessage message) 

{

if (MsgSubscriptionMap.ContainsKey(message.ID))

{

var subIds = MsgSubscriptionMap[message.ID];

foreach (var id in subIds)

{

if (Subscribers.ContainsKey(id))

{

Subscribers[id].Receive(message);

}

}

}

 

 

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

리틀캔들님의 댓글

리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

아~ 구독이라는 개념이 뭔가 아해가 안갔었는데 이글을 보고서 좀 이해가 갔습니다.
좋은정보 감사해요^^

IT Tip&Tech 목록

Total 125건 1 페이지
IT Tip&Tech 목록
번호 제목 글쓴이 날짜 조회
열람중 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 2 댓글1 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-11 237
124 [Tip,C#] 간단히 만들어보는 메시지 처리 구조 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-01 238
123 [Tip,C#] protobuf 메시지 정의 나누어 배포하기 (내용추가) 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-23 308
122 [Tip,C#] protobuf 메시지 정의 나누어 배포하기 댓글3 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-18 350
121 QT Creator, undefined symbol: FT_Get_Font_Format 오류 리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-08 385
120 배경 누끼 따주는 사이트 리틀캔들 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-27 264
119 [link] 메모리 관련 글 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11-15 1792
118 마소가 Azure Sphere 라는걸 만들었데요. 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-17 2795
117 MTPutty 댓글2 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-16 3181
116 Visual Studio 툴바 아이콘들 사라질때 해결방법 인기글첨부파일 black_H 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-13 2559
115 openvpn 연결 후 1시간뒤 연결이 자동으로 끊긴다면 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-04 3366
114 openvpn ip 고정시키기 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-03 2470
113 openvpn id/pwd 로 접속하기 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-02 2157
112 openvpn 설치해보기 댓글3 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-02 2796
111 Pro Git 이 무료로 배포되고 있었군요. 댓글1 인기글 책읽는아이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-20 3326
게시물 검색

접속자집계

오늘
220
어제
743
최대
3,675
전체
685,127
회사소개 개인정보취급방침 서비스이용약관
Copyright © LittleCandle All rights reserved.
문의메일 : littlecandle99@gmail.com
상단으로
모바일 버전으로 보기