인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

cocoaa님의 프로필 이미지

작성한 질문수

Combine - iOS의 Reactive Programming(2025)

3-3 Stream이란?

merge 오퍼레이터 질문

해결된 질문

작성

·

82

0

안녕하세요.

stream은 시간이 지남에 따라 변하는 어떤 상태로 이해했는데요.

publisher1과 publisher2에서의 stream을 각 stream1, stream2라고 했을때 시간이 지남에 따라 동시에 상태가 변하면 해당 상태는 merge 오퍼레이터에서 방출은 어떻게 처리하나요?

 

[동시가 아닌 경우]

-1-2-3-

--4--5--6--

-> 1-4-2-5-3-6

 

[동시인 경우]

-1-2-3-

-4-5-6-

-> ?????

답변 2

0

cocoaa님의 프로필 이미지
cocoaa
질문자

음 물리적 시간이 같은 경우는 있을거 같은데 말씀하신 0.0000001초의 오차인 경우 순서를 정하는것도 좀 애매하네요...

API 호출에 대한 비동기 퍼블리셔가 2개인 경우 정확히 물리적인 시간이 같은 동시인 경우가 분명히 있을거 같습니다.(없으면 race condition 같은 상황도 발생하지 않겠죠)

마찬가지로 Merge를 해서 방출해야하는 시점에서, 방출 상태에 대한 리소스에 접근하려는 경쟁 상태는 분명히 올것 같습니다.

좀 더 찾아봐야겠어요. 답변 감사합니다!

애구마(agmma)님의 프로필 이미지
애구마(agmma)
지식공유자

안녕하세요 cocoaa님!

race condition 같은 경우는 완전 동시에 접근해서 생긴다기 보다는

1개의 쓰레드가 어떤 공유자원(변수)에 접근 중일때 다른 쓰레드가 또 접근해서

수정하는 경우, 실행할 때마다 결과가 일정하지 않는 것이라고 알고 있습니다.

 

여기서 말하는 동시 접근은 완전히 물리적으로 같은 타이밍에 접근한다기 보다는

한 쓰레드가 접근 중일때 다른 쓰레드가 접근 함을 의미합니다.

먼저 접근한 쓰레드가 해당 공유 자원을 계속 수정중일때 다른 쓰레드에서 나중에 접근함을 의미하죠.

 

말씀하신 API호출도 2개의 비동기 작업이 요청되었다가 결과를 받는 타이밍도 아마 시간 차이가 있을텐데요. 만약 두개의 결과를 merge한다고 하면 그 시간 차이에 따라 순서가 결정된다고 보시면 됩니다.

 

cocoaa님의 프로필 이미지
cocoaa
질문자

엇 제가 race condition에 대한 개념을 잘 이해하고 있지 못했네요.

음 정말로 물리적인 시간이 같다고 하더라도 뭔가 OS 스케줄러에 의한 조금의 시간차이는 발생할거 같네요.

단순히 어? 동시에 방출되면 어떻게 되는거지하는 생각에 머리속이 복잡해져 버렸던거 같습니다.

답변 감사합니다!

애구마(agmma)님의 프로필 이미지
애구마(agmma)
지식공유자

"음 정말로 물리적인 시간이 같다고 하더라도 뭔가 OS 스케줄러에 의한 조금의 시간차이는 발생할거 같네요."

정확합니다~!

감사합니다

0

애구마(agmma)님의 프로필 이미지
애구마(agmma)
지식공유자

안녕하세요

동시라곤 하지만 그 입력이 0.0000001초의 차이가 있을텐데요

그 순서에 따라 merge된 다운스트림으로 보내집니다

아주 조금이라도 먼저 방출된 값이 다운스트림에 먼저 보내진다고 생각하시면 됩니다!

cocoaa님의 프로필 이미지

작성한 질문수

질문하기