[iOS] 차근차근 시작하는 GCD — 1

이번엔 제발 이해하고 싶다 GCD..🥂

naljin
6 min readOct 8, 2020

들어가기 전에

님덜 하-이! GCD!!!!!!! 많이 들어봤져?? 님들은 잘 아세요?? 일단 전 모름! ㅎ 진짜 모르겠어서 미디엄에 첫번째로 쓴 글이 GCD인데도 모르겠음여

그때의 저도 사실 몰랐겠죠?ㅎㅎ

아니 용어도 개념도 다 어려워서 모르겠는데 어쩌라구~~~~~~~

그러다가 인프런에 좋은 강의가 있어서 들으면서 좀좀따리 정리를 해보려고 합니다 ㅎㅎ

아 물론 저의 글을 보는 것보다 강의를 듣는게 백배천배만배 이해가 잘 될 거라고 생각해요!!! 무족권..강의 추천 드립니다..👍🏻👍🏻👍🏻👍🏻

튼 저의 개인적인 정리글은 현생이 바빠서 시리즈로 잘 연재가 될 수 있을진 모르겠지만..! 그것은 미래의 나에게 맡기고 오늘의 나는 일단 쓰고 보는 것~~

이번엔 제발 잘 이해하길 바래보며.. GCD 열차 출발합니다~~~🚅🚅🚅🚅

노동자에게 일을 분배해보자

우리 컴퓨터에는 많은 노동자들이 있어요. 그리고 현실 세계와 같이 일거리도 있다고 합시다.

자자 일을 분배해볼게요.

?!

현실에 이런 곳이 있다면 바로 도망쳐야겠죠..? 하지만 우리의 불쌍한 노동자 1은 도망치지도 못하고 열심히 일을 합니다..

나름 능력이 좋아서 쉬운 업무는 금방 금방 처리하는데, 파란색 일 같이 시간이 좀 오래 걸리는 것도 있나보네요.

Thread에게 Task을 분배해보자

엥 thread, task용어 나온 순간부터 벌써 보기 싫어지는 부분 인정합ㄴㅣ다. 하지만 사실 이미 개념들은 나왔다구요.

눈치 빠른 분들은 보셨나요?! 제목이 변형 된걸..!

노동자 = Thread, 일 = Task

두둥 그렇습니다. 다시 그림을 살펴보죠!

노동자는 thread고 일은 task라고 했죠? 여기서 파란색 task 처럼 길게 표현 된 것들은 이미지 다운로드 같은 무거운 작업이라고 보면 됩니다. 얘는 단순 연산(분홍색)과는 다르게 시간이 오래 걸려요 ㅠ

자 일거리가 몰린 불쌍한 노동자 1에 집중해봅시다. 바로 우리의 하나뿐인 메인 스레드죠.

오잉 근데 애가 갑자기 모자도 쓰고 화가스러워졌ㄴㅔ요..? 맞습니다. 얘가 하는 대표적인 작업 중 하나는 UI를 그리는 일이에요!

왜 UI를 메인 스레드에서 다루는가! 까지 궁금하시다면 이곳을 참고하세요!

화가 스레드! 메인 스레드!

“엥? 아니 지금 할당된 일(task)도 많아 죽겠는데 뷰는 또 언제 그리고 있냐는 말임? 쟤한테 일을 저렇게 몰아주면 안되지;” 라는 생각이 들지 않나요?

근데 님덜.. 그거 알아요? 코드 작성할때 별도의 처리를 안했다면 그 일들이 다 얘한테 넘어가고 있었을거란 사실.. 님들이 바로 그 사탄도 손절하는 사람이었던거임..

받아라 일..!
또 받아라 일..!
더 받아라 일..!
계속 계속 해라 일..!!

프린트나 단순 계산 같은거는 금방금방 끝낸다 쳐도, 인터넷에 있는 이미지 한번 뿌릴라고 하면 파일 다운로드 해야하지.. 변형도 필요하면 해야하지.. 이미지 표시도 해야하지..

이런 상황에서 화면이 버벅거리지 않고 배겨요?! 뷰를 그려주는데 온전히 집중할 수 없을만큼 무거운 작업들이 많으니까요!

일을 잘 나눠보자 (aka 동시성 프로그래밍)

아 그럼 어떻게 하냐고요? 흠.. 잊지 마세요. 우리에겐 잉여 인력이 더 있었다는 사실.

꿀 빠는 잉여 인력들

자 쟤네들이 더 이상 전력 먹고 월루하지 않도록 일을 잘 나눠야겠죠?

즉, 메인 스레드에 몰린 작업들을 다른 스레드에서도 동시에 작업 하도록 하는 것! 이게 동시성 프로그래밍입니다.

일을 잘 나누게 시키자

흠.. 근데 어떤 애한테 어떤 일 보낼지 어떻게 결정해서 잘 나눠..? 몰라 걍 어려우니까 메인 스레드한테 다 시키면 안돼? ㅠ 라고… 생각할 수 있졍! (바로 내 마음..)

삼진 에바로 메인 쓰레드에서 처리하기로 했습니다 ㅠ

하지만 다행히도… iOS 에서는 작업을 한 곳에 보내기만 하면됩니다. 그럼 알아서 OS가 다른 스레드로 분산 처리를 해준다고요…!!!

그 곳이 어디냐고요? 바로 queue (aka 대기 행렬) 입니다.

메인 스레드에 몰린 일을 큐로 보냅시다

Queue의 특성답게 선입 선출로 빠져나갈 거예요

튼 이제 우리가 할 일은 명확해졌습니다.

작업을 큐로 보내자.

다음 시간에 계속 됩니다.

마치며

강의는 12분인데 왜 이거 쓰는데 120분은 걸린것 같을까요..?ㅎ 과연 시리즈로 연재가 될 수 있을 것인가! 모르겠다리! ㅎㅎ

다음 포스팅 👉🏻

출처

--

--