작성
·
33
·
수정됨
답변 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의 필요는 주로 안정성과 안전성에 초점이 맞추어져 있습니다.
아래 링크에서 유사한 질문과 답변을 확인해 보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
알기 쉬운 설명 감사드립니다. OpenMP와 MPI를 이용한 병렬화를 하면서 Thread 개념이 어려웠는데 잘 알려주셔서 감사드립니다.