티스토리 뷰

728x90

GCD 공부를 하다가

아니 async는 일을 기다리지 않고 여러개 처리를 하는거고

Concurrent는 동시성인데 같은뜻 아닌가? 

의문이 생겼습니다. 

 


 

 

Thread1 , Thread2 가 있다고 가정

비동기(Async) 

Thread1작업을 Thread2에서 하도록 시킨 후, 

해당 작업이 끝나는걸 기다리지 않고 다음일을 이어 진행한다. 

 

동기(Sync)

Thread1작업을 Thread2에서 하도록 시킨 후,

해당 작업이 끝날때 까지 기다렸다가 다음일을 진행한다.

 

 

Thread1, Thread2, Thread3, Thread4 가 있고

대기열(queue)에 대기중인 작업이 있다고 가정

 

Serial queue (직렬 큐)

큐(Queue)에 등록된 작업을 한번에 하나씩 처리합니다. 

항상 순서가 보장 됩니다.

 

Concurrent queue (동시 큐)

큐(Queue)에 등록된 작업을 동시에 수행할 수 있게 합니다.

처음등록된 작업이 끝나지 않아도 다음작업을 다음 Thread에 할당해서 동시에 처리되게 합니다.

등록된 작업이 끝나는 대로 출력을 하기 때문에 순서보장은 되지 않습니다.

 


 

결정적으로 둘의 차이는 

Queue의 유무에 따라 다르며,

 

대기열(queue)에 있던 작업들이 여러 thread로 나뉘어지면?

--> concurrent (동시)

 

대기열(queue)에 있던 작업들이 하나의 thread로만 보내지면?

--> serial (직렬)

 

어떤 Thread에 있는 작업을 다른 Thread로 보내 작업을 시키는데 기다린다?

--> sync (동기)

 

안기다린다? 

--> async (비동기)

728x90