• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.

23.07.05 13:08 작성 23.07.05 13:09 수정 조회수 269

0

안녕하세요 앨런(Allen)님!

수강 중 질문이 생겨 처음 인사드립니다.

[섹션0.GCD - 1.GCD/Operation에 앞서] 강의까지 듣고 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지 질문드립니다.

-

2개 이상의 프로세스가 동시에 작업하는 것이 ‘동시성 프로그래밍(Concurreny Programming)’이고 IOS에서 이러한 동시성 프로그래밍을 사용하기 위해 작업을 대기행렬(Queue)에 보내며, 대기행렬(Queue)은 직렬(Serial)과 동시(Concurrency)이라는 특성을 가지고 있다고 이해했습니다.

이 과정에서 동기(Sync)는 작업을 다른 스레드(Thread)에서 하도록 시킨 후, 기다렸다가 다음 일을 진행한다고 설명해 주셨는데 그렇다면 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지 확실하게 확인하고 넘어가면 좋을 것 같아 질문을 드리게 되었습니다.

추가로 대기행렬(Queue)의 특성 중 직렬(Serial) 작업을 분산시킨 *메인 스레드(Thread)가 있기 때문에 동시성 프로그래밍(Concurreny Programming)으로 볼 수 있다고 이해했는데 이해한 내용이 맞는지도 함께 답변 주시면 큰 도움이 될 것 같습니다.

*강의 영상에서 말하는 Thread1을 작성한 것입니다.

-

혹시 제가 잘못 이해한 부분이 있으면 함께 답변 남겨주시면 감사하겠습니다 :)

답변 2

·

답변을 작성해보세요.

0

Ellie님의 프로필

Ellie

질문자

2023.07.05

상세한 답변 감사합니다.

네네 질문을 주셔서 따져가면서 디테일하게 답변드리긴 했지만, 일반적으로 동시(Concurrent)를 말할때는 동시큐에서 여러개의 쓰레드를 사용해서 동작하는 것을 보통 동시라고 일반적으로 많이 표현한다고 보시는게 좋을 것 같긴합니다. :)

0

네 안녕하세요! ide.codein 님.

(1) 동기(Sync)는 동시성 프로그래밍(Concurreny Programming)이 아닌 건지
예를 들어, 1번 쓰레드에서 2번 쓰레드로 동기(sync)적으로 보내면, 이론적으로는 동시(Concurrent)로 볼 수도 있지만, 실제 내부적으로 동시로 동작하지 않습니다. 1번 쓰레드에서 예를 들어 2번 쓰레드로 동기(sync)로 보내면... 실제로 일을 보내서 기다리지 않고, 그냥 자기 쓰레드에서 처리하기 때문에.. 실제 내부적으로 1번쓰레드에서 동작하게 되어 있고.. 그 때문에 동기는 동시가 아니라고 보는게 정확하긴 합니다.

(2) 직렬(Serial)동시성 프로그래밍(Concurreny Programming)인가
이건 기준을 어디로 보는가가 중요할 것 같아요. 만약에 메인쓰레드에서 다른 쓰레드로 보내지 않고 그냥 동작하는 것은 동시성이 아니고, 만약에 메인 쓰레드에서 다른 직렬 큐로 보내서 하나의 쓰레드로 보냈다면.. (1) 1번 메인쓰레드도 동작하고 있고 (2) 기타 예를 들어 2번 쓰레드도 직렬로 동작하고 있을 것이기 때문에 이건 동시성 이겠죠.


그런데, 제가 질문을 받으면서 받은 느낌은..
이론적으로 뭔갈 끼워맞추시려는 느낌이 듭니다.. 사실 동시성 프로그래밍 자체가 그냥 전체를 포괄해서 동기/비동기.. 직렬/동시 이런 것들을 포괄적으로 다루는 개념이기도 하고, 하나의 쓰레드가 아닌 여러개의 쓰레드에서 동작하는 프로그램을 어떻게 만들 것인지 다루는 포괄적인 개념이기 때문에
동기가 동시인가? 직렬이 동시인가? 이런걸 따져보는게 크게 중요한가?라는 생각이듭니다. 그냥 제가 그림까지 그려서.. 내부적으로 어떻게 동작하는지 알려드리고 있으니.. 그런 큰 그림을 그리시는게 더 중요하지 않을까? 이런 생각이 듭니다.

감사합니다. :)