본문 바로가기
츄Log/끄적끄적

뇌가 뜨거워지는 멀티스레드 프로그램에서 좀비스레드

by 츄츄🦭 2024. 6. 15.
728x90

 

동시성 프로그래밍을 연습중입니다.

 

좀비스레드는,

앱 실행이 끝난 뒤에도 계속 실행 상태로 남아 앱의 리소스를 차지하는 스레드입니다.

 

좀비스레드는 다양한 상황에서 발생할 수 있습니다.

예외처리 미흡, 스레드 자원정리 미흡, 스레드풀 사용시 등등,, 

저는 동시성 프로그래밍을 연습하면서 좀비스레드를 만들어보았습니다.

 

동시성 처리가 되어있지 않은 ArrayList에 데이터를 발행/소비하는 Producer와 Consumer를 만들고 이를 여러 스레드로 수행했습니다.

일부 예외가 발생한 스레드는 상위로 전파되어 Runnable이 종료되어 스레드 정리가 되었으나,

일부 스레드는 계속 해당 로직에서 busy waiting 상태로 머물러있었습니다.

 

Producer 하나와 Consumer 3개를 만들었는데, Producer1, Consumer2는 OutOfIndex 예외가 발생하여 종료하였고

나머지 consumer1과 consumer3은 영원히 끝나지 않는 while(true)에 갇혀 계속 돌고있는 모습입니다. 

 

물론 동시성 처리가 없는 멀티스레드 환경에서 결과는 매~번 다르므로 위 상황이 항상 재현되는 것은 아닙니다. 

제가 기대한대로 동작할 수도 있고, 모두 예외가 발생하여 프로세스 자체가 종료될 때도 있었습니다.

 

한가지 확실한건, 동시성 처리가 되지 않은 멀티스레드 상황을 분석할 때는 뇌가 매우 뜨거워진다는 사실입니다. 

멀티스레드 프로그래밍은 꼭 동시성 처리가 필수임을 기억합시다.

 

그러고보니, thread-safe하다는 것은 동시성 처리가 되었다는 뜻일까요? 

같은 개념일지 아니면 thread-safe가 동시성 처리의 한 종료일지.. 궁금하네요. 

언젠가 멀티스레드 프로그래밍 고수가 된다면 알게 되겠지요?

 

 

728x90