[Java] 동기(Synchronous) vs 비동기(Asynchronous)

김나윤·2024년 6월 20일

IT지식

목록 보기
2/2
post-thumbnail

1. Thread(스레드)

1) 개념

Thread는 프로세스(실행되고 있는 프로그램)의 내부에서 실행되는 흐름의 단위를 말한다.

Java에서 thread를 보자면, Java가 실행되면 우리가 Java를 실행시킬 때 사용하는 main()으로부터 main 스레드가 실행되며 이 main 스레드의 흐림이 곧 프로그램의 흐름이 된다.

2) 종류

(1) Single Thread

(2) Multi Thread

  • Java에서는 Multi Thread를 지원한다.

2. 동기(Synchronous)

1) 개념

  • 직렬적으로 tast를 수행한다.
  • task는 순차적으로 실행되며 어떤 작업이 수행 중이면 다음 작업을 대기하게 된다.

3. 비동기(Asynchronous)

1) 개념

  • 병렬적으로 task를 수행한다.
  • task가 종료되지 않은 상태라고 하더라도 대기하지 않고 다음 task를 실행한다.

이렇게 동기와 비동기에 대해 정리하고 나니 ArrayList와 Vector의 차이점에 대해서도 설명할 수 있게 되었다.

2) 비동기(Async)의 예시

(1) JQuery의 Ajax

JQuery로 실제 웹 개발을 할 때 Ajax 특성을 빼놓을 수 없다.
보통 화면에 표시할 이미지나 데이터를 불러와 표시해야 하는데 이때 Ajax 통신으로 해당 데이터를 서버로부터 가져올 수 있기 때문이다.


그렇다면 비동기 방식이 동기 방식보다 더 효과적인 처리방법이 아닌가? 동기 방식이 필요한 이유는 뭘까 하는 의문이 들었다.
또한 언제 동기를, 언제 비동기를 사용하면 좋은지에 대해서도 궁금해졌다.

4. 동기(Sync)와 비동기(Async)의 장단점

1) 동기(Sync)

(1) 장점

  • 작업을 설계 및 작업 흐름 파악이 쉽다.
  • 다른 스레드에서 접근할 수 없기 때문에 안정적인 작업이 가능하다. (Thread Safe)
    Thread Safe란?

(2) 단점

  • 효율성이 떨어진다.

2) 비동기(Async)

(1) 장점

  • 요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있다.
    따라서 시스템 자원을 보다 효율적으로 사용할 수 있다.

(2) 단점

  • 동기식보다 설계가 복잡하다.

그럼 언제 동기 방식을 쓰고 언제 비동기 방식을 쓰는 것이 프로그래밍에 있어 효과적일까 하는 의문이 다시 들게 되었다.
간단한 요청 작업에는 동기 방식도 무리없이 사용되겠지만, 파일 업로드나 대용량 데이터 처리 작업이 필요할 경우네느 비동기 방식을 사용해 업무 효율성을 높일 수 있다.



참고

Java에서 동기, 비동기란?

ArrayList vs Vector

JavaScript 비동기 처리와 콜백 함수

profile
Hello, world!

0개의 댓글