개발 일지/운영체제

자바의 비동기 처리(feat. 멀티 스래드)

osul_world 2022. 5. 26. 11:44
728x90

자바의 비동기 처리

이전 포스트에서 비동기 구현에서 발생하는 문제를 해결하기 위해 비동기 처리를 해줘야한다고 했다.

 

💡 비동기 방식은 A와 B가 서로가 끝났든 안 끝났든 상관 없이 자신의 일을 하므로, A 의 작업 결과를 B에서 요구하는 경우에는 결과가 예상하는 값과 달라지는 등 곤란해질 수 있다.

 

비동기 처리의 방법

콜백 함수를 사용하여 코드의 흐름을 제한 하거나, 비동기로 작동하는 코드 사이에 동기 함수를 끼워넣어서 코드의 흐름을 조정하는 등의 기법을 이용해 비동기 처리를 구현 한다.

 

자바에서는 주로 멀티 스레드로 비동기를 구현함으로 멀티스레드에서 발생할수있는 동시성 문제를 해결하는 것이 자바의 비동기 처리의 주 과업이다.

 

💡 Javascript에서 callback뿐만이 아니라 Promiseasync/await 등의 다양한 방법으로 비동기 처리를 구현할 수 있듯, Java에서도 비동기 처리를 할 수 있는 다양한 방법이 있다. (Future객체를 사용하는 방식과 Callback을 구현하는 방식으로 코드 단에서 처리하기도 한다.)

 

멀티스래드 == 비동기?

멀티 스래드가 비동기를 의미하는것은 아니다.

 

멀티스레딩 프로그래밍은 여러 다른 함수들을 동시에 실행하는 것이고, 비동기 프로그래밍은 여러 함수들이 non-blocking 으로 실행되는 것이다.

 

동기적 ,비동기적이라는 것은 단일 스레드, 멀티 스레드 모두에게 적용될 수 있다.

 

스레드는 작업자의 시점이고 동기,비동기는 작업방식의 시점이다.

 

멀티 스레드는 병렬 수행을 가능하게 하는 것이고 이 스레드들이 동기적으로 동작할지 비동기로 동작할지는 그 다음 사항이다.

 

따라서 멀티스레딩은 비동기 프로그래밍의 한 형태인 것이다.

 

 

다음 포스트에서는 멀티 스레드의 동시성 문제를 해결하는 방법을 정리하고자 한다.

Reference

https://jayhyun-hwang.github.io/2021/09/02/The-Difference-Between-Asynchronous-And-Multi-Threading/

https://velog.io/@pllap/Java에서의-비동기-프로그래밍

 

728x90