java
-
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) 스레드의 사용 이유 - 스레드와 프로세스의 차이 스레드는 성능을 위해서 사용합니다. 요즘 데스크탑에서 여러 프로그램을 사용하는 건 이상하지 않습니다. 병렬적으로 처리가 가능하기 때문입니다. 엄밀히 말하자면 두 가지 방식이 있습니다. 병렬적으로 처리하는 것과, 병렬적으로 처리하는 것처럼 보이게 하는 것(사실은 용어가 나뉘지만 지금은 이 정도로 표현하겠습니다). 좀 이상하죠? 동시에 처리하는 방법이 있는데(프로세스), 왜 굳이 '그래 보이는' 방법(스레드)이 따로 있을까요? 다른 이유는 아니고, 프로세스가 스레드에 비해 생성비용이 크기 때문입니다. 조금만 더 자세히 요약해볼게요...
-
PS tip: 그래프 탐색의 자료구조 - ArrayDequeJava 2022. 7. 26. 09:40
PS를 하다보면 그래프 탐색도 문제 많이 풀게 되죠. 그래서 저는 거의 공식처럼 외우고 있는 내용이 있어요. DFS할 때는 Stack || ArrayList || 재귀, BFS할 때는 LinkedList로 구현된 Queue. 저만 생각하는 부분은 아닐거에요.😀 근데 혹시 Deque로 구현하면 어떨까요? 예를 들어, Stack 자료구조의 문서로 가보면 이런 설명이 있습니다. : "Stack보다는 Deque 인터페이스를 우선적으로 사용하세요. 그게 더 빠릅니다" 저의 경우에는 그 문구를 보고 나서부터 Deque를 사용하게 되었어요. 그런데 습관적으로, 이렇게 사용했습니다. Deque deque = new LinkedList(); '앞 뒤로 remove가 일어나니까 ArrayList는 적합하지 않을 것 같아'..
-
최소신장트리: 백준 9372 상근이의 여행PS 2022. 7. 23. 14:38
최소신장트리: 백준 9372 상근이의 여행 간단한 팁을 하나 남겨보고자 포스팅을 합니다. 제목에 쓰여있듯이 신장트리(spanning tree)라는 것에 대한 이야기예요. 문제와 풀이 문제 링크 : 백준 9372 - 상근이의 여행 👇펼쳐서 코드와 해설 읽기 문제를 보면 즉시 BFS로 풀어야겠다는 생각이 들죠. 최소신장트리에 대해서 모르는 상태였기 때문에 저도 그랬습니다. 신장 트리란 모든 정점을 포함하고 있는 그래프를 말합니다. 그리고 모든 정점을 가장 짧은 경로로 연결하는 그래프를 최소 신장 트리라고 합니다. 물론 몇가지 제약이 있지만 일단 개념은 그렇습니다(무향 그래프에서 가중치나 비용이 특별히 없을 때). 최소신장트리가 그려질 때에는 한 그래프에서 여러 형태로 존재할 수 있고, Self loop는 불..
-
Java: 어플리케이션 실행 옵션 비교 - VM Options / Program ArgumentsJava 2022. 7. 19. 11:59
Java: 어플리케이션 실행 옵션 방식 비교 - VM Options / Program Arguments 자바 어플리케이션은 여러 옵션을 가지고 실행될 수 있습니다. 이 글에서는 옵션들을 설정해주는 두 가지 방법에 대해 알아보고 비교해봅니다. 옵션의 활용과 비교 보통은 배포환경에 따라 별도의 property를 작성해두고, 경우에 따라 다른 property를 읽어가며 배포할 jar를 빌드하는 용도로 많이들 사용하곤 하죠. 아래에서도 해당 상황을 예시로 들어서 설명하려고 합니다. 1. VM Options 옵션을 주는 첫번째 방법은 VM Options입니다. 이름에서 알 수 있듯이, 이 방법을 통해 전달한 키/값은 JVM에 전달됩니다. 누구나 한 번 쯤 메모리 설정과 관련해서 -Xms 어쩌구.. 또는 -Xmx ..