Microsoft MVP성태의 닷넷 이야기
글쓴 사람
tky
홈페이지
첨부 파일
 

여러개의 버퍼의 내용을 압축한 데이터를 담는 스트림 클래스를 작성하고 있습니다.
스트림이다보니 Read, Write와 ReadAsync, WriteAsync메서드를 작성해야 하는데
멀티 스레드 처리를 하려 하는데 어떤 방식이 좋을지 몰라 질문드립니다.
현재는 동기 메서드는 멀티스레드 처리를 하지 않고 있고
Async 메서드는 여러 Task로 멀티 스레드를 하고 있습니다.

1. Task 사용
지금 Async 메서드에 사용하고 있는 방법입니다.
Task 배열에 tasks[i] = CompressAsync(...); 식으로 Task를 받아온 다음
await Task.WhenAll(tasks);로 끝날 때 까지 기다리는 방식입니다.

2. Parallel 사용
Parallel.Invoke를 통해 한번에 처리하는 방식입니다.

3. 새 스레드 생성
스레드를 생성하여 병렬 처리 한 뒤
CountdownEvent 등으로 기다리는 방법입니다.

4. ThreadPool 사용
위 방법에서 ThreadPool.QueueUserWorkItem을 사용하는 방법입니다.

일단 위 4개 방법을 생각해 보았는데... 어떤 방법이 제일 좋을지 질문드립니다.
그리고 SetLength등의 메서드에도 병렬 처리를 하는게 좋을지도 질문드립니다.








[최초 등록일: ]
[최종 수정일: 5/10/2022]


비밀번호

댓글 작성자
 



2022-05-10 12시08분
딱히 어떤 것을 선택해도 무방할 듯합니다. 어차피 3번을 제외하면 각각의 방법이 추상화 정도만 다를 뿐 모두 CLR ThreadPool을 사용하는 유형에 불과합니다. 물론 추상화 정도에 따라 성능 손실이 있겠지만 스트림을 처리하는 데이터의 크기나 작업량에 따라서는 거의 무시해도 좋을 것입니다. (3번을 택한다면 세세한 제어는 가능하겠지만 ThreadPool을 직접 구현해야 하는 불편함이 있을 것입니다.)

"SetLength 등..."이라고 했는데, 그 부분은 질문하신 분이 간단한 테스트를 해보고 필요 여부를 판단해야 하지 않을까요?
정성태
2022-05-10 08시27분
답변 감사드립니다. 그럼 코드는 기존과 같이 작성하고
SetLength 같은건 일단 병렬처리 한것과 아닌것 둘다 작성해볼게요
tky

... 31  32  33  34  35  36  37  38  39  40  [41]  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4829윤현수4/26/201714849System.Text.Encoding 질문 [1]
4828jaem...4/20/201711092시스템 종료시 block 함수 xp 지원가능한 방법 질문 [2]
4827ds4/13/201713069매서드 정의로 이동시 [메타데이터에서]에서 라고 나오는 것은 뭔가요? [1]
4826김솔지4/11/201710344CxImage 문자 출력 [1]
4825플메4/10/201710744덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/201710123win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/201711171windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/201712821글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201726509파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/201711175오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/201712483C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201721443DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/201710744서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/201713488C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/20179555.net core linux 오류 [2]
4814김솔지3/13/201710624인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spow...3/8/201712178멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/201712251.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/201715304C# 가상 시리얼 [4]
4808이길용2/9/201714014WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식...2/8/201720625WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식...2/7/201714030WPF로 메신져 메세지 박스 구현 문의 [2]
4802spow...2/6/201711048특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spow...2/7/201710941    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
4805spow...2/7/201710660    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? (글삭제가 안돼 재첨부합니다)파일 다운로드1
4801spow...2/3/201710528C#의 참조 동작관련하여 아이디어 문의 드립니다 [4]
... 31  32  33  34  35  36  37  38  39  40  [41]  42  43  44  45  ...