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
[76375] Re:Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은?
하루종일 [kissjung] 705 읽음    2022-11-13 13:24
입력파일을 별도의 폴더에 넣어서 계산하는 방법은 시험해 보지 않았습니다.
입력파일이 수백개 또는 수천개 가 되는 경우도 있는데, 각각의 폴더를 생성 하는 것은 비 효율적이라고 생각 됩니다.
bat 파일로 만들어서 계산하는 방법보다 빠르게 계산하는 것이 목적이라....

도스로 실행하는 부분만 별도로 프로그램을 작성 했습니다.
"입력자료 폴더 열기" 버튼으로 입력파일 폴더를 선택하고.
"계산하기" 버튼을 누르면 계산이 됩니다.
"계산결과 파일 확인" 버튼은  정상적으로 저장이 되었는지를 확인 합니다.

첨부 파일에 소스와 입력자료, 도스실행파일이 포함되어 있습니다.
입력자료와 도스실행파일(hec1.exe)은 "HEC_Input_Data" 폴더에 있습니다.
입력자료와 도스실행파일(hec1.exe)는 같은 폴더에 있어야 합니다.

Thread Pool 함수는 "씹어먹는 C++" 강좌의 소스를 그대로 사용했습니다.
https://modoocode.com/285


Alone 님이 쓰신 글 :
: 저번에 말씀드린대로 속도 문제가 아니었지요?
: 혹시 다른 폴더에 각각 실행되게끔 해보신 것인지요?
:
: 이런 경우에서 단순한 문제가 아니면, 뭐가 잘못되는지 알기가 어렵습니다.
: 현상을 확인할 수 없으면, 어려운 부분인 듯 하니, 가능하시면(?)
: 해당 문제의 도스실행파일과 테스트 해보신 소스를 올려주시면 문제를 같이 고민해 드릴 수는 있습니다..
:
:
: 하루종일 님이 쓰신 글 :
: : 첨부한 프로그램을 설치해서, 시험을 해보았는데...
: : 여전히 같은 문제가 발생을 합니다.
: :
: : 그럼,, 하드디스크 속도 문제가 아니라는 결론인데...
: :
: : 도스 프로그램 실행은  WinExec(command.c_str(), SW_HIDE);, CreateProcess  를 사용해 보았는데 마찮가지로 계산결과가 중간에 달리게 저장되네요
: :
: : 무엇이 문제 일까요??
: :
: :
: : Alone 님이 쓰신 글 :
: : : 그럼, 말씀하신 대로의 내용이 문제가 된다고 치고, 고성능의 디스크로 테스트 해보면 되겠네요?
: : : 
: : : RAM DIsk를 설치하셔서 해당 디스크 상에서 테스트 해보세요.
: : : 시스템에 설치된 RAM 속도에 비례하는 I/O를 성능을 보여줍니다.
: : :
: : : 현존하는 SSD보다 일반적으로 빠르게 동작하는 디스크 이니,
: : : 테스트 해 보시는 것을 권합니다.
: : : (메모리의 속도에 따라 틀려지지만, 제 시스템의 경우 1TB/s 이상 측정, 크리스털 디스크마크 결과)
: : :
: : : 첨부 파일에 무료(상위버전은 유료)로 사용할 수 있는 버전의 프로그램을 하나 올려둡니다.
: : : 제한이 최대 디스크 크기가 4G 라서
: : : 설정화면에서 4095 MB 로 설정하면 됩니다.  더 큰값은 에러납니다.
: : :
: : :
: : :
: : : 하루종일 님이 쓰신 글 :
: : : : 의견 감사 합니다.
: : : :
: : : : 도스프로그램은 입력을 받아 계산을 하고 계산결과를 파일로 저장 합니다.
: : : : 도스프로그램이 동시에 여러개 실행되더라도, 입력파일 및 저장파일 이름은 다릅니다.
: : : :
: : : : 이런 도스 프로그램을 동시에 여러개 (CPU 코어 갯수에 비례해서 증가) 실행이 됩니다.
: : : : 즉 동시에 여러 파일을 읽고, 여러 파일을 하드디스크에 쓰기를 하게 됩니다.
: : : : 저장한 결과 파일 중 약 30%정도는 계산결과가 저장이 완료되지 않습니다.
: : : :
: : : : 저는 이 현상을 하드디스크의 쓰기 속도 문제로 생각을 하고 있기 때문에, 다른 폴더에 저장을 한다고 해도 동일 것 같다고 판단됩니다.
: : : :
: : : : 만약 도스프로그램 계산결과를 파일이 아닌 메모리에 저장하는 방법이 있다면,
: : : : 해결방법이 있을것 같기는 합니다.
: : : :
: : : :
: : : : Alone 님이 쓰신 글 :
: : : : : : 아마도, 도스프로그램 저장속도를 하드디스크 가 따라가지 못해서 저장손실이 발생하는 듯 합니다.
: : : : :       라고 하셨는데, 도스 프로그램을 쓰던 시대에 비하면, 저장 속도는 이미 충분하다 못해 넘치는 하드웨어라고 봅니다.
: : : : :      아마 파일을 저장하기 위해 동일한 파일을 동시에 쓰레드 여러곳에서 엑세스해서 문제가 생기는 것은 아닐지요?
: : : : :     
: : : : :      각 쓰레드 별로 폴더 구조를 만들어서 도스 실행파일이 있도록해서, 서로 다른 경로에서 실행되도록 해보시는 건 어떨까요?
: : : : :     각 폴더 내에 별개로 결과 파일이 생성되겠지요.
: : : : :
: : : : :
: : : : : 하루종일 님이 쓰신 글 :
: : : : : : 실행 파일만 있고, 이 실행파일을 동시에 여러개 (CPU코어갯수 * 2 +1, 쓰레드 풀 사용)를 실행한다는 것입니다.
: : : : : :
: : : : : : 제가 이해 하기 어렵게 글을 작성한 듯 합니다.
: : : : : :
: : : : : : 왕초보와코드 님이 쓰신 글 :
: : : : : : : 글 내용에 모순이 있는데요.
: : : : : : :
: : : : : : : 소스가 없는 도스프로그램이라, 저장을 제어 할수가 없습니다
: : : : : : :    => 이건 결국 실행파일만 가지고 있다는 거죠?  그런데 스레드로 구현했다는 말은 뭔가요?
: : : : : : :
: : : : : : : 아니면 실행파일을 여러개 동시에 실행했다는 말인가요?
: : : : : : :
: : : : : : :
: : : : : : :
: : : : : : : 하루종일 님이 쓰신 글 :
: : : : : : : : 1980년대에 개발된 도스프로그램을 멀티스레드로 동시에 여러개를 실행하려 합니다.
: : : : : : : : 동시에 여러개 실행은 잘 되는데, 문제는 동시에 여러개의 파일을 하드디스크에 저장을 하지 못하네요.
: : : : : : : :
: : : : : : : : 도스프로그램이라, 입력파일을 읽고 계산이 끝나면 파일로 저장을 합니다.
: : : : : : : : 한번에 한개씩 저장할때는 문제가 없는데,
: : : : : : : : 스레드로 구현을 하니, 여러개가 동시에 실행되면서, 하드디스크에 동시에 저장을 하니 저장파일이 깨지는 문제가 발생 합니다.
: : : : : : : : 아마도, 도스프로그램 저장속도를 하드디스크 가 따라가지 못해서 저장손실이 발생하는 듯 합니다.
: : : : : : : :
: : : : : : : : 하드디스크를 SSD로 사용을 해봐도 여전히 문제가 발생 합니다.
: : : : : : : :
: : : : : : : : 소스가 없는 도스프로그램이라, 저장을 제어 할수가 없습니다.
: : : : : : : :
: : : : : : : : 이 문제를 해결 하려면, 도스프로그램이 저장하는 파일을 메모리에 저장한 후 하드디스크 저장속도를 초과하지 않게 저장을 해야 할 것 같은데,,,,
: : : : : : : :
: : : : : : : : 혹시 해결 방법이 있을까요?

+ -

관련 글 리스트
76358 도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 725 2022/10/30
76359     Re:도스 프로그램의 멀티쓰레드 구현방법은? 왕초보와코드 704 2022/11/01
76360         Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 689 2022/11/01
76361             Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 656 2022/11/02
76365                 Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 739 2022/11/04
76369                     Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 687 2022/11/11
76370                         Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 618 2022/11/11
76373                             Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 626 2022/11/12
76375                                 Re:Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 705 2022/11/13
76376                                     Re:Re:Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 692 2022/11/13
76377                                         감사 합니다. ^^; 하루종일 639 2022/11/13
76378                                             Re:감사 합니다. ^^; Alone 643 2022/11/13
76379                                                 Re:Re:감사 합니다. ^^; 하루종일 653 2022/11/13
76381                                                     Re:Re:Re:감사 합니다. ^^; Alone 708 2022/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.