• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

베리어에 관한 질문입니다.

21.09.16 10:59 작성 조회수 123

1

안녕하세요 강사님.

강사님 강의를 듣고 경쟁상황을 원초적으로 해결하는 방법은 여러 쓰레드가 한개의 공유자원에 접근하게 될 때 공유자원에 접근 하는 수를 시스템이 안전한 만큼 제한하는 것이라고 이해하였습니다. 그래서 예제에서 직렬큐를 사용했을 때, 이는 합리적이며 논리에 벗어나지 않는다고 생각하였습니다. 

그런데 오늘 베리어를 배웠을 때 "왜 동시큐에 왜 직렬화 기능을 넣어주는 거지?" 라는 생각이 들었습니다. 만약 어떤 객체에서 동시작업과 직렬 작업을 나눠놓을 이유가 있다면 직렬 큐와 동시큐를 새로 만들면 되지 않을까 싶습니다. 

물론 애플의 정책을 모두 이해 할 수는 없기에 왜 베리어를 만들었는지에 대한 답변을 기대하기는 어렵지만 혹시 직렬큐를 새로 만들지 않고 베리어를 사용하는 경우는 어떤 상황이 있을지 궁금합니다.

 

답변 1

답변을 작성해보세요.

0

안녕하세요!

 

jxl05 님!

 

네, 경쟁상황에 대한 근원적인 해결법에 대해.. 

명확하게 포인트를 잡으셨네요! 맞습니다. 당연히 하나의 메모리에 저장된 값에 한번에 

하나씩 접근하도록 하는 것이 그 근원적인 해결입니다.

 

 

따라서

(1) 직렬큐를 사용하거나

(2) 말씀하신 대로 배리어를 사용하거나

(3) 세마포어를 사용하거나

(4) (한번에 하나의 쓰레드에서만 접근하도록) 락을 잠그거나 등등

 

 

 

위의 방법 모두가… 어찌되었든 간에
메모리에 한번에 하나씩 접근하도록 만들 수 있는 방법이긴 합니다.

 

 

다만, 차이점이라고 하면 방법적으로…

한번에 하나씩 접근하게 만드는, 그 내부 구현 방법에 차이가 있는 것이겠죠!

 

 

 

네.. 그런데 질문주신 내용이, “디스패치 배리어(Barrier)”의 기능에 관련된 것인데요,

사실 배리어로도 하나의 쓰레드에서만 하나의 메모리 공간에 접근이 가능하도록

만드는 방법이어서, Thread-safe하게 

만들 수 있는 방법 중에 하나이긴 하지만,

 

정확하게는 조금 다른 목적(역할)이 있긴 합니다.


실제 그게 어떤 포인트 인가에 대해 말씀드리면..

아래의 그림에서 보시는 바와 같이 

 

 

 

 

 

 

 

배리어 작업은 내부적으로 동기화 작업이 가능하도록 설계가 되어 있어,

사실 (주된) Thread-safe 처리 목적보다, 사실 더 차원 높은 처리(?)가 가능한 기능이라고 생각하시면 될 것 같습니다.

 

그러니까 다시 말씀드리면, 직렬화 + 동기화(모든 일처리 시점을 기다림) 기능이 있기 때문에

음.. 저도 명확한 예시가 잘 안 떠올라서…

 

 

 

그냥, 정말 예를 위한 예로 말씀드리자면.. 

예를 들어,

파일 A (압축이 5개 파일로 나눠져 있음.. a1 … a5)  

파일 B (압축이 5개 파일로 나눠져 있음.. b1 … b5)

 

(관련 모든 파일 다운로드 후 압축풀기 가능)

 

뭐 이런 예시를 생각해 본다면요! (아래 그림 처럼요)

 

 

 

 

 

위의 그림에서..표현된 것처럼 어떤 하나의 파일 A같은 경우에는 반드시

a1 부터… a5까지의 파일이 다 다운로드가 되어야

압축이 제대로 풀릴 것이기 때문에

 

하나의 묶음(파일 A 묶음)이 다 다운로드가 완료된 시점에 압축을 “제대로”로 풀 수 있고

이런 시점에 동기화(즉, 동시적으로 여러개의 파일이 받아진 시점에 압축 풀기 가능)가 이루어질 수 있기

때문에, 이런 종류의 처리를 할 수 있는 게....

 

배리어 작업이라고 생각하시면 될 것 같습니다.

 

(근데, 배리어가 좋은게.. 어떤 처리가 끝나면.. 다시 동시 다운로드와 같은 동시작업을 다시 재개가 가능합니다.)

 

 

 

네, 그래서.. 결론적으로 다시 말씀드리면..

배리어 처리는

배리어 만의 기능을 하는 것이 주목적이고, 이런 기능 때문에  Thread-safe 처리를 위한 

하나의 방법으로도 사용할 수 있다 정도로 생각하시면 좋을 것 같습니다.




궁금한 내용에 대해 조금이라도 해결되시길 바라며..



강의를 수강해 주셔서,

고맙습니다. 

jxl05님의 프로필

jxl05

질문자

2021.09.17

답변 감사합니다. ㅎㅎ