'Re-entrancy' 사용 시 프로그램 속도 문의드립니다.
114
작성한 질문수 16
다양한 작업의 병렬처리 시에 Thread를 사용해서 보다 빠르게 프로그램을 구현하는 것으로 알고 있습니다.
Re-entrancy를 사용할 경우, Thread를 강제로 순차 작업하도록 구현하는 걸로 보이는데
그럼 Thread를 사용하지 않고 순차 실행되게 코드를 구성하는 것과 속도 차이가 있을까요?
답변 2
1
Reentrancy는 강제로 순차적으로 하는 것이 아니라 여러 Thread가 병렬로 동작하는 특정 조건에서 Thread를 더 안전하게 동작하도록 설계하기 위한 방식입니다. 순차적으로 작업하는 방식은 동기화 방식이고 Re-entrancy는 여러 Thread가 동작되는 상황에서 Thread들이 안전하게 실행되는데 목적이 있습니다.
따라서 Re-entrancy는 객체나 함수가 여러 스레드에서 동시에 호출되더라도 안전하게 동작하도록 설계된 프로그래밍 방식을 의미합니다. Re-entrancy는 Thread를 순차 실행하는 것과는 관련이 없습니다. Re-entrancy도 Thread를 안전하게 쓰는 방법을 말합니다.
예를 들어 컴퓨터 공장에서 컴퓨터를 만드는데 A공장과 B공장이 있다고 가정해 봅시다. A공장과 B공장은 함께 동작되는데 A공장에서 먼저 컴퓨터를 만드는 작업이 완료되어야 만 B공장에서 컴퓨터를 만드는 작업을 완성할 수 있다고 가정해볼께요.
만약 B공장이 컴퓨터를 만드는 작업중에 A공장을 거치지 않고 컴퓨터를 만드는 것을 진행하면 불량 컴퓨터가 만들어 지겠죠. 이것을 순차적으로 하면 블록킹이 걸려서 다른 공장들이 작업을 못하겠죠. 이 회사는 컴퓨터만 만드는 것이 아니라 가전들도 다른 공장(예로 C, D, E 등의 공장)들과 함께 만든다고 가정한다면 컴퓨터를 만드는 공장들 때문에 블록킹이 걸릴 수 있겠죠.
그래서 Re-entrancy 는 Thread를 사용하는데 좀더 Thread를 병렬로 쓰는데 안전하게 Thread를 쓰기 위한 하나의 방법입니다. Re-entrancy는 Thread 와 별개가 아닙니다. 여기서 공장을 Thread로 대입해 보시면 더 이해하는데 도움이 되실 것 같습니다.
혹시 더 궁금한게 있으면 언제든 질문해 주세요.
1
안녕하세요, 인프런 AI 인턴입니다. 다중언어GUI님.
Re-entrancy(재진입성)를 프로그램에서 사용하는 것은 상황에 따라 다르게 적용될 수 있습니다. 기본적으로, Re-entrant 코드는 동일한 입력에 대해 여러 스레드나 여러 함수 호출 시에도 안정적으로 동일한 출력과 동작을 보장합니다. 따라서, 다중 스레드 환경에서 동시성을 안전하게 유지할 수 있는 장점이 있습니다.
질문 주신 것처럼 Re-entrancy를 보장하기 위해 스레드를 순차적으로 처리하는 것처럼 보일 수 있는데, 이는 특정 상황에서만 나타날 수 있습니다. 동기화 메커니즘 (예: mutex, lock 등)을 통해 스레드 간의 리소스 접근을 제어할 수 있기 때문인데요, 이는 잠재적으로 병렬 처리의 효율성을 떨어뜨릴 수 있습니다.
하지만, 스레드의 사용 이유인 비동기적 실행과의 차이에서 큰 이점은 대기 시간과 같은 외부 입력이나 I/O 작업의 시간 낭비를 최소화하여 전반적으로 향상된 응답성을 제공하는 데 있습니다. 순차적인 실행만을 목표로 했다면, 굳이 스레드를 사용하지 않고도 코드를 구성할 수 있습니다.
속도 차이는 프로그램의 특성, 작업의 종류 및 시스템의 성능에 따라 달라질 수 있습니다. 다만, Re-entrancy의 필요는 주로 안정성과 안전성에 초점이 맞추어져 있습니다.
아래 링크에서 유사한 질문과 답변을 확인해 보세요:
- Re-entrancy의 의미와 사용법 – Re-entrancy와 스레드 동기화 방법에 대한 설명이 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Build system의 Obs 에 관한 질문
1
27
2
PLAY 버튼 동작 미리보기 관련 질문드립니다!
0
33
2
pygame 설치오류
0
119
1
로드맵 재수강 로드맵 할인문의
1
43
2
PDF파일 다운로드 위치
0
60
2
강의 재수강 문의
1
53
2
언리얼 버전 문의드립니다!
0
81
2
강의 연장 문의
1
77
2
아직 강의를 시청중이긴 한데 혹시 다음 강의도 준비하고 계신가요?
1
101
2
custom Widget 강의 에서 알려주신 promoted widgets 질문 드립니다.
1
118
2
QML로 만든 파일도 똑같이 설치판 제작하면 되나요?
0
171
2
QImage에서 이미지가 안불러와집니다.
1
318
2
Android 폰에서 개발환경 설정과 예제 App 구현 질문드립니다.
1
304
1
'Re-entrancy를 만족하는 Thread 예제 구현' 에서 질문있습니다.
1
363
2
크로마키 영상처리 소스코드 구현 (2/2편) 에러가 발생합니다.
1
362
1
Writing QML Extensions with C++ 내용에 대해서 질문드립니다!
1
346
1
Qt Creator 기능 질문드립니다.
1
340
1
위젯프로그램 위에 챠트 띄우기
1
558
1
QT로 이미지나 json 파일 가져올때
1
434
1
QT로 구현한 프로그램 실행관련 및 추가질문
1
1361
3
Go to slots 을 사용했을때 connect 함수 위치
1
358
1
Qt Quick 모듈의 해석 질문드립니다.
3
362
2
QT에서 그래프 챠트 그리는 방법 문의
2
1866
2
Window에서 프로그래밍한 것을 리눅스로 옮기는 방법
2
390
1





