1️⃣ sync와 async의 차이는 무엇인가요?

<aside> 💡 다음 작업을 기다리는 것과 기다리지 않고 다음 작업을 실행하는 것

</aside>

2️⃣ async와 concurrent는 구분되는 개념이라고 했습니다. 각각을 설명해보세요.

<aside> 💡 async는 어떤 동작을 기다리지 않고 다음 동작을 실행하는 것이다 concurrent는 싱글코어에서 멀티 스레드 작업을 동시에 실행되도록 보이게 하는 작업

</aside>

3️⃣ DispatchQueue에서 serial 큐와 main 큐는 같은 것인가요?

<aside> 💡 일반적인 serial 큐와 main 큐는 다른 큐이다. main 큐는 메모리 상에 계속 올라가 있는 큐입니다. UI작업을 다룰 때 사용됨 일반적인 serial와는 달리 main.sync는 일반적인 상황에서 작동되지 않음 (global안에서 작동)

</aside>

4️⃣ DispatchQueue에서 main과 global()의 차이는 무엇인가요?

<aside> 💡 main 은 프로퍼티, global()은 메서드 main - Serial 큐 global() - Concurrent 큐

</aside>

5️⃣ main 스레드는 어떤 특징을 가지고 있나요?

<aside> 💡 main 큐는 메모리 상에 계속 올라가 있는 큐입니다. UI작업을 다룰 때 사용됨 일반적인 serial와는 달리 main.sync는 일반적인 상황에서 작동되지 않음 (global안에서 작동)

</aside>

6️⃣ Serial에서 async는 어떻게 동작하나요?

<aside> 💡 제어권이 즉시 main thread로 돌아간다. 해당 큐에 있는 작업이 단 한개만 동작하고 있다.

</aside>

7️⃣ serial 큐에서 sync로 작업을 처리하면 어떻게 될까요?

<aside> 💡 순차적으로 실행될 것 코드는 다른 스레드에서 실행되지만 main thread에서는 해당 작업이 끝나기를 기다림 작업이 단 한개만 동작

</aside>

8️⃣ main.sync를 사용하면 어떻게 되나요? 그 이유는 무엇인가요?

<aside> 💡 main.sync를 직접적으로 호출하면 **deadlock(교착상태)**에 빠짐

9️⃣ 병렬 프로그래밍과 동시성 프로그래밍은 각각 무엇인가요? 서로 반대되는 개념일까요?

<aside> 💡 서로 다른 개념이다 병렬 프로그래밍은 다중 코어, 멀티 스레드로 동시에 여러가지 일을 실행하는 반면 동시성 프로그래밍은 싱글 코어, 멀티 스레드로 동시에 여러 일을 처리하는 것처럼 보이게 하는 특징을 가짐

</aside>