sync, async 질문
409
작성한 질문수 5
답변 1
1
네, mi kim 님 안녕하세요!
사실 답변을 드리면.. 너무 빨리 질문을 주신게 아닌가 하네요^^; 사실 뒤에 다 나오는 내용이거든요. 그래도 일단 말씀을 드려볼께요.
1. 번 질문에 대한 답변
오직 메인쓰레드에서만 기다리는 개념이 아닙니다. 어떤 쓰레드인지든 상관없이 기다린다(sync)/기다리지 않는다(async)의 개념이예요. 그래서 예를 들어서 2번쓰레드에서 하는 일을.. 다시 또 다른 쓰레드로 일을 보낸다면.. 기다리거나 안 기다리거나 할 수 있습니다. ^^
예를 들어서
DispatchQueue.global( ).async {
print("task1")
DispatchQueue.global(qos: .background ).async {
print("task2")
}
}
이런형태의 코드 있다고 하면

이런 그림으로 동작하고 각각의 쓰레드에서 기다릴지 말지로 생각하시면 편합니다. 즉 작업 두개(task1/task2)를 일단은 둘다 2번쓰레드로 보냈는데 task2는 다시 다른 쓰레드로 보내집니다. 그렇다면, 여기서. 작업 task1은 메인쓰레드에서 기다리지 않는 개념이 되고, task2는 2번 쓰레드에서 기다리지 않는 개념이 됩니다.
2.번 질문에 대한 답변
2번 질문에서 가정하신 상황이 (concurrent큐가 여러종류이므로 일단은 다른 동시큐라고 가정을 하면) 아래그림 처럼 될텐데,

2-1번 질문: 작업2를 실제 직접 수행하는 건 (5번이 아닌) 2번 쓰레드(말씀하신 쓰레드A)가 맞습니다. (기다리는 개념이기 때문에 굳이 다른 쓰레드로 보낼 필요가 없기 때문이기도 하죠.) 내부 동작은 그렇게 동작합니다. 다만, 그렇게 생각하실 필요가 전혀 없습니다. 그냥 이론적으로 제가 위에 그려드린 대로 쓰레드 5번에서 동작한다고 생각하시는 게 그냥 편하고 머리속으로 더 잘 그려집니다. (실제 동작을 우리가 알 필요가 없고, 더 헷갈리기만 합니다.)
2-2번 질문: 작업1이 종료된다음, 작업 2를 sync로 보내는 작업을 하게 됩니다. 즉 작업 1이 다 종료된 다음 그제서야 이제 보내므로, block은 나중에 일어납니다.
일단 위에 제가 그려드린 그림을 보신 후에, 이해가 안되시면 또 질문 남겨주세요... ^^
오퍼레이션 큐 질문
0
147
2
2) 오퍼레이션큐(OperationQueue) 강의 질문입니다
0
153
2
warning 뜸
0
169
1
수업자료 markup 에 대해 궁금합니다!
0
285
1
예제 프로젝트 빌드 실패
0
344
2
serial 큐 질문드립니다.
0
261
1
[7-3.DispatchBarrier] 예제 코드 질문
0
337
1
안녕하세요, GCD 관련 질문드립니다..
0
292
1
main.async 작동 질문(+ vs global(),async)
0
442
1
dismiss 되었을 때 종료질문
0
314
1
'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.
0
511
2
Dependency Protocol 관련
1
376
1
시리얼 큐와 sync 관련
0
477
2
sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미
0
658
1
lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?
0
392
1
global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.
1
518
2
비동기 개념에서 무엇을 return하는 거죠??
0
398
1
안녕하세욤
1
349
1
Barrier 작업 관련 질문입니다.
1
350
1
디스패치 그룹
1
386
1
global async안에 global async를 만들게되면 어떻게 되나요??
2
393
2
동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다
1
296
2
비동기오퍼레이션 관련 질문
1
378
1
강의자료는 어디에 있나요?
1
328
1





