동기(Sync)와 비동기(Async)

📌동기(Synchronous)

특정 쓰레드(Thread)에 진행해야 할 작업이 여러 개라면 다른 쓰레드에게 작업을 시킨 후, "해당 작업이 끝나길 기다렸다가 다음 작업을 진행"하는 방식입니다.

📌비동기(Asynchronous)

특정 쓰레드에 진행해야 할 작업이 여러 개라면 다른 쓰레드에게 작업을 시킨 후, "해당 작업을 기다리지 않고 다음 작업을 진행"하는 방식입니다.


직렬(Serial)과 동시(Concurrent)

📌직렬(Serial)

특정 쓰레드(보통의 경우: 1번 쓰레드, 메인 쓰레드)에서 분산처리 시킨 작업(특정 쓰레드의 작업 묶음)을 특정 한 개의 쓰레드에서 처리하는 방식

📌동시(Concurrent)

특정 쓰레드(보통의 경우: 1번 쓰레드, 메인 쓰레드)에서 분산처리 시킨 작업을 다른 여러 개의 쓰레드에서 처리하는 방식

🤔 왜 직렬(Serial) 처리가 필요할까??

특정 쓰레드에 몰려있는 작업을 분산 처리하여 진행할 때는 동시 처리가 직렬 처리보다 효율적이지만, 순서가 중요한 작업을 처리할 때는 직렬 처리를 사용해야 합니다.

직렬(Serial) 처리동시(Concurrent) 처리
순서가 중요한 작업을 처리할 때각각의 작업이 독립적인 작업(독립적이지만 유사한 작업)을 처리할 때

비동기(Async)와 동시(Concurrent)

🤔 비동기(Async)와 동시(Concurrent)는 같은 개념/의미일까?

결론부터 말하자면 비동기(동기)와 동시(직렬)는 완전히 다른 개념/의미입니다.

비동기(Async)는 작업을 보내는 쓰레드(1번 쓰레드, 메인 쓰레드)의 진행 상황(작업을 기다릴지 말지)의 개념을 의미하지만,

동시(Concurrent)는 특정 쓰레드(1번 쓰레드, 메인 쓰레드)에서 다른 여러 개의 쓰레드(2번~n번 쓰레드)로 작업을 보낼 때 몇 개의 쓰레드가 관여했는지의 개념을 의미합니다.


동시성(Concurrency)프로그래밍의 필요성

특정 쓰레드(1번 쓰레드, 메인 쓰레드)에 작업이 몰려있으면 효율성이 떨어지기 때문에 프로그램의 성능이 떨어집니다.

이러한 이유로 프로그램의 성능 및 반응성 등을 높이기 위한 최적화 과정이 필요하며, 이러한 최적화 과정에 있어 동시성(Concurrency) 프로그래밍 작업이 필요합니다.

✋참고!!

"동시성(Concurrency) 프로그래밍"의 내용 안에 "비동기(Async) 프로그래밍"의 내용이 자리 잡고 있습니다. (동시성 프로그래밍을 하기 위해서는 비동기(Async) 방식의 과정이 필요하기 때문)

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글