생각20 java.util.concurrent 안에는 뭐가 들었을까 이전 블로그 포스팅에서 동시성 제어의 원초적 접근법으로 synchronized 가 유효한지 살펴보았습니다. 이 후, java.util.concurrent 패키지에서 synchronized 의 단점을 보완할 수 있는 방법을 찾게되었습니다.synchronized 에 치명적 단점은 두 가지가 있습니다. synchronized 키워드로 이루어진 영역에 스레드가 접근하려면 모니터 락을 획득해야합니다. 스레드는 모니터 락을 획득할 때까지 무한 대기합니다. 이때 해당 스레드의 상태는 BLOCKED 입니다. BLOCKED 상태는 interrupted() 로도 다시 RUNNABLE 상태로 전이시킬 수 없습니다. 락을 얻기 전까지는 계속 BLOCKED 상태로 머무릅니다. 그래서 '무한' 대기 상태에 빠지게됩니다. 심지어 .. 2025. 1. 4. 동시성 제어의 원초적 접근법, 애플리케이션 락은 유효한가요? 거의 모든 서비스는 애플리케이션 당 N 대의 Pod 를 가동합니다. 동시다발적으로 각 Pod 에서 공유자원에 접근할 수 있으므로, race condition 을 고려하기 위해 DB 락, 레디스 락 등이 거론됩니다. 나를 비롯한 대부분의 서버 개발자들이 분산 락 개념들을 인지하고 있어야하는 이유입니다. 근데 문득 이런 생각이 들었습니다. Pod 가 한 대라면 이런 것들을 알아야할까? 애플리케이션 락으로만 컨트롤 할 수 없을까? 단 하나의 Pod 만 운용하는 사례는 극히 드물다 하더라도, 궁금했습니다. 이런 저런 분산 락 도구에 가려 잊혀진 애플리케이션 락, synchronized 에 대해서 다시 한 번 고찰해보는 시간을 가져보았습니다.synchronized는 Java 멀티스레딩 환경에서 동기화를 제공하는.. 2024. 12. 14. join() 이용해보려다가 실패한 사연 쓰레드는 상태를 가진다. 쓰레드가 가질 수 있는 상태는 다음과 같다. 위 상태들을 쭉 보다가 TIMED_WAITING 와 WAITING 은 어떻게 다른지 궁금해졌다. 언제 전이되는지, 어떤 상태에서 전이될 수 있는지를 직접 실험해보았다. 그리고 팀에서 관리하는 서비스에서 적용할 만한 사례를 찾아보았다. 천천히 스텝 바이 스텝으로 나아가기로했다. TIMED_WAITING 과 WAITING 상태인 스레드를 직접 눈으로 확인해보는 것이 시작이었다. 다음 코드에서 TIMED_WAITING 으로 전이될 수 있는 포인트가 있다. Thread.sleep(3000) 이다. sleep() 은 스레드를 잠시 멈추게 한다.실행을 일시 중단했다가 얼마의 시간이 지난 후 다시 재실행한다. 이 과정에서 스레드의 상태는.. 2024. 11. 28. 메인 스레드, 커스텀 스레드, 데몬 스레드 테스트 찍먹일기 : multiThread & concurrency 2 Thread main 은 언제 만들어진걸까? 프로세스가 실행되려면 최소한 하나의 스레드는 존재해야한다고 이전 포스팅에서 설명했다. 왜냐면 정말 일을 doing 하는 건 스레드이기 때문이다. 자바에서는 실행시점에 main 스레드가 만들어지도록 설계되었고 main 스레드가 main() 메서드를 실행한다. 이걸 주관하는 건 JVM이다.그럼 또 다른 스레드 Thread-0 은 어디서 튀어나온 애일까? TwiceThread 같은 사용자 정의 스레드를 생성하고 start() 메서드를 호출하면, JVM은 새로운 스레드를 생성한다. 그리고 스레드 생성 차례에 맞게 Thread-0, Thread-1 같은 순서로 이름붙인다. 그래서 Thread-0 이 응애하고 출력된 것.사진을 보면 start() 를 호출했는데 내부적으로.. 2024. 10. 9. <도둑맞은 집중력> 읽다가 멀티 스레드 공부 하게 된 이야기 : multiThread & concurrency 1 얼마 전 을 읽어보았다. 흥미로웠던 부분은 '인간의 뇌는 멀티태스킹을 할 수 없다'는 주장이다. 인간의 뇌는 기본적으로 한 번에 하나의 작업에만 집중할 수 있도록 설계되어 있다. 그런데 우리가 여러 작업을 번갈아가며 수행하다 보면, '컨텍스트 스위칭'이 자주 발생한다. 이로 인해 두뇌의 효율이 떨어지고, 점점 더 둔해지는 것처럼 느껴진다. 뇌에서 발생하는 이 컨텍스트 스위칭을 '인지적 전환'이라고 부르는데, 이 과정에는 상당한 비용이 따른다. 그 이유는 전두엽의 용량. 멀티태스킹을 할 때, 한정된 전두엽의 자원이 여러 작업에 분산되면서 각 작업에 필요한 집중력이 점차 감소하기 때문이다. 나는 멀티 테스킹이 안되는 인간이라고 생각했는데 사실은 그게 자연스러운 일이라는 것에 심심한 위로를 받았다.인간은 충.. 2024. 10. 6. 누가 궁금하다고 한 사람? 느낌, 생각, 경험을 완벽하게 언어로 담아낼 수 있을까. 언어는 너무 불안전하다. 말과 실재는 먼 거리에 있다. 단어와 문장으로써 덧칠해진 것으로만 대상을 이해할 수 있다. 실재와는 다르게 이해할 수 있다. 그래서 언어는 너무 중요하다. 가끔 언어를 너무 못한다는 생각에 부딪힐 때 입을 앙 다물고 말게 된다. 말하려는 실체를 나의 말로 설명하기 벅차서다. 며칠 간 상반기 회고를 진행하고, 몸 담았던 프로젝트를 글로 정리했다. 어떤 과정이었고 문제 해결을 어떻게 했고 아쉬운 게 무엇이었으며 ... 어쩌구저쩌구... 근데 다 정리를 하고 나서도 무언가 빠뜨린 느낌이 든다. 정말 이게 다 인가? 글로 정리하면서 다 쏟아내고 아듀! 하고 싶었는데, 그게 잘 되지않는다. 파이프는 '파이프'가 아니다. 파이프는.. 2024. 8. 22. 이전 1 2 3 4 다음