Java/Multi Threading 기초
-
[Java Multithreading] 메모리 영역 - Stack과 HeapJava/Multi Threading 기초 2022. 10. 25. 13:57
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. 오늘은 멀티스레드 애플리케이션을 구현할 때 고려해야 하는 기초적인 메모리 지식에 대해 이야기 해보려고 합니다. 달리 말해 스택과 힙 이야기인데요. 각 메모리 영역의 특성과 어떤 것들을 포함하는지를 생각해 보겠습니다. Stack 스택은 각 스레드마다 생성되는 메모리 영역입니다. 이 영역에 포함되는 것은 다음과 같습니다. 호출된 메서드와 현재 실행 중인 구문을 표시하는 명령어 포인터(Instruction Pointer) 인자(argument)와 지역변수 메서드 리턴 값을 저장하기 위한 공간 메서드는 하나의 프레임으로 쌓이고 메서드에 사용되는 변수들은 해당 프레임 안에 쌓입니다. 이 하나의 프레임은 ..
-
[Java Multithreading] 성능 최적화의 두 관점 - 처리량과 http 서버Java/Multi Threading 기초 2022. 10. 24. 17:48
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. (포스팅마다 번호 매기는 건 헷갈려서 그만둘게요...) 처리량(throughput) 지난 포스팅에서는 지연시간(latency)를 줄이기 위한 전략 중 하나로 태스크를 서브태스크로 나누는 방식을 소개했습니다. 그리고 거기에는 다음과 같은 오버헤드를 고려해야 했죠. 태스크를 서브태스크로 쪼개는데 드는 비용 스레드를 생성하는 비용 start()된 스레드가 스케줄링 되기 까지의 시간 마지막 스레드가 작업을 끝내고 시그널을 보내기까지의 시간 작업을 취합할 스레드가 시작하기까지의 시간 서브태스크의 결과물을 하나로 취합하기 까지의 비용 하지만 그것은 하나의 작업을 처리하는 시간(지연시간)을 줄이기 위한 해결..
-
Java Multithreading [4] - 성능 최적화의 두 관점 - 지연 시간Java/Multi Threading 기초 2022. 8. 29. 08:46
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. 4.1. 성능 최적화의 두 관점 - 지연 시간 프로그램의 성능을 최적화한다는 것은 구체적으로 무엇을 말하는 것일까요? 프로그램의 처리 속도를 높이는 것이 될 수도 있고, 통신의 레이턴시를 낮추는 것일 수도 있고, 정확한 응답값을 반환하는 것일 수도 있고, 정확한 조건에 동작하는 것일 수도 있고... 사실 '성능 최적화'라고만 말한다면 상황에 따라 수많은 정의가 적용될 수 있을 것 같습니다. 하지만 이번 포스팅에서는 성능을 관측하는 데에 대표적으로 쓰이는 두 가지 지표만을 공부해보려고 합니다. 첫번째는 지연 시간(latency), 두번째는 처리량(Throughput)입니다. 멀티스레..
-
Java Multithreading [3] - Thread#join() : Thread 간을 조정하는 방법Java/Multi Threading 기초 2022. 8. 23. 13:49
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. 3. Thread#join() : Thread 간을 조정하는 방법 중 하나 지금까지 하나의 스레드가 여러 작업을 할 수 있다는 것과 여러 스레드가 동시에 동작할 수 있다는 것을 알게 되었습니다. 그렇다면 여러 스레드가 하나의 작업을 동시에 하는 것도 가능할까요? 결론부터 말하면 가능합니다. 흔히 경쟁조건Race Condition이라고 말하는 상황이죠. Race Condition에 대해 깊이 들어갈 것은 아니고요(깊이 알지도 못하고...😅), Race Condition의 여러 상황 중 하나를 예로 들어 join()을 설명하고자 합니다. 예를 들어 ThreadA와 ThreadB가 동시에 작업중이라고..
-
Java Multithreading [2] - Java에서 Thread를 종료하는 법Java/Multi Threading 기초 2022. 8. 18. 09:02
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. 2. Java에서 Thread를 종료하는 법 Java에서 Thread를 만들고 시작하는 방법을 알아보았으니까 이제 종료하는 법도 알아봐야할 것 같아요. 왜냐면 어떤 경우에는 Thread가 자체적으로 종료되지 않는 로직을 가지고 있을 수 있는데, 단 하나의 Thread만 살아있더라도 어플리케이션은 종료될 수 없기 때문이에요. 실행시킬 수는 있지만 종료시킬 수 없다면 그 어플리케이션은 아주 큰 문제를 가지고 있는 거겠죠! 계속해서 실행되고 있다는 것은 메모리와, 운영체제의 자원과, 스케줄링 대상에 계속해서 들어간다는 것이고(상대적으로 다른 작업에 방해가 될 수도 있고), CPU 캐시를 차지하고 있어..
-
Java Multithreading [1] - Java에서 Thread를 생성하는 법Java/Multi Threading 기초 2022. 8. 16. 08:29
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. 1. Java에서 Thread를 생성하는 법 Java로 프로그래밍을 하고 있는 누구나 Thread를 사용 중입니다. main() 메서드를 실행하는 main thread인데요. 이 thread는 메인 메서드가 실행되서 끝나는 블록을 만날 때까지의 실행을 담당합니다. 그러면 하나의 thread만 더 추가/실행할 수 있다면 multithreading을 구현하게 되는 거네요! Java에서는 thread를 실행하는 데에 필요한 속성과 동작들을 하나의 class로 JDK에서 관리하고 있습니다. Thread라는 이름의 클래스입니다. Thread t = new Thread();와 같은 식으로 새로운 스레드를 ..
-
Java Multithreading [0] - 스레드와 프로세스의 차이Java/Multi Threading 기초 2022. 8. 12. 08:52
Java Multithreading 멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다. 0) 스레드의 사용 이유 - 스레드와 프로세스의 차이 스레드는 성능을 위해서 사용합니다. 요즘 데스크탑에서 여러 프로그램을 사용하는 건 이상하지 않습니다. 병렬적으로 처리가 가능하기 때문입니다. 엄밀히 말하자면 두 가지 방식이 있습니다. 병렬적으로 처리하는 것과, 병렬적으로 처리하는 것처럼 보이게 하는 것(사실은 용어가 나뉘지만 지금은 이 정도로 표현하겠습니다). 좀 이상하죠? 동시에 처리하는 방법이 있는데(프로세스), 왜 굳이 '그래 보이는' 방법(스레드)이 따로 있을까요? 다른 이유는 아니고, 프로세스가 스레드에 비해 생성비용이 크기 때문입니다. 조금만 더 자세히 요약해볼게요...