2024/11 15

Java volatile

java에서 volatile 키워드는 스레드들 사이에서 변수에 저장된 값을 변경하는 것에 대한 가시성을 보장합니다 여기서 가시성이란 최신 상태를 유지 하고 변경된 값을 즉시 읽을수 있도록 보장한다는 말이다.     Using Cache in Multi CPUPermalink여러 개의 CPU를 사용하는 멀티 스레드 환경에서 데이터 동기화 문제가 발생합니다.각 CPU들이 각자의 스레드를 실행합니다.어플리케이션의 같은 변수를 사용하지만, CPU 캐시에 데이터를 로딩해서 사용합니다.   1.1. Data not matched between main memory and cpu cachePermalinkCPU1은 Thread1을 실행합니다.CPU2는 Thread2를 실행합니다.CPU1은 Thread1을 수행하면서 ..

Java 2024.11.15

CompletableFuture에 대해서

CompletableFuture는 Java 8에서 도입된 비동기 프로그래밍을 위한 클래스입니다. 이 클래스는 비동기 작업을 수행하고 그 결과를 비동기적으로 처리할 수 있는 메커니즘을 제공합니다. 기존의 Future 인터페이스의 단점을 보완하여, 비동기 작업의 결과를 쉽게 조합하고 체이닝(Chaining)할 수 있도록 설계되었습니다.  [ Future의 단점 및 한계 ]CompletableFuture가 갖는 작업의 종류는 크게 다음과 같이 구분할 수 있는데, 이에 대해서는 자세히 코드로 살펴보도록 하자.비동기 작업 실행작업 콜백작업 조합예외 처리   비동기 작업 실행runAsync반환값이 없는 경우비동기로 작업 실행 콜supplyAsync반환값이 있는 경우비동기로 작업 실행 콜  runAsync는 반환 값..

Java 2024.11.15

Java에서 dead lock이란 무엇인가요?

데드락이란? 멀티 스레드 환경에서 일어날수 있는 현상이다. 동기화를 통해 락을 획득하여 동일한 자원을 여러 곳에서 함부로 사용하지 못하도록 한다.하지만 두 개의 스레드에서 서로 락이 해제 되길 기다리는 상태가 생길수 있으면 이 내용을 교착상태(deadlock) 이라고 합니다.   DeakLock 발생 조건상호 배제 (Mutual Exclusion) :  한 자원에 대해 여러 쓰레드 동시 접근 불가점유와 대기 (Hold and Wait) : 자원을 가지고 있는 상태에서 다른 쓰레드가 사용하고 있는 자원 반납을 기다리는 것비선점 (Non Preemptive) : 다른 쓰레드의 자원을 실행 중간에 강제로 가져올 수 없음환형대기 (Circle Wait) : 각 쓰레드가 순환적으로 다음 쓰레드가 요구하는 자원을 ..

Java 2024.11.14

ThreadLocal vs synchronized 차이점

멀티 스레드 환경에서 동시성 이슈는 자주 일어난다. 자바에서 synchronized 와 약간 비슷한 공통점도 있지만 성격 자체가 다르다. 공통점은 동시성 관련 내용을 해결해주지만 동작 방식이 완전 다르다. 1. synchronizedsynchronized는 객체 공유를 제어 하는 역할이다.여러 스레드가 동일한 객체를 접근할때 블로킹을 통해 안전성을 보장한다.동기화 비용이 있어서 블로킹으로 인해 성능 저하가 있을수도 있습니다. 2. ThreadLocalThreadLocal는 각 독립적인 스레드의 값을 가지게 한다. 스레드 마다 고유의 값을 보장한다.각 스레드에 고유의 값을 저장한다.동기화를 신경 쓸일 없어서 성능적으로 높지만 메모리 소모가 많을수도 있다. 동시성 문제 해결 측면에서의 차이synchroniz..

Java 2024.11.12

Monitor

모니터란? mutual exclusion(상호 배제) – 하나의 스레드만이 특정한 시점에 메서드를 실행할 수 있습니다. locks기법을 사용합니다.cooperation – 특정 조건이 충족될 때까지 스레드를 대기시키는 기능. wait-set을 사용합니다.해당 기능은 모니터라고 하는 이유는 모니터는 스레드 리소스에 어떻게 접근 하는지 모니터링 하기 때문입니다. 모니터의 특징모니터는 동시성 프로그래밍에 세 가지 주요 기능을 제공합니다:한 번에 하나의 스레드만 critical code section에 mutually exclusive(상호 배제적)으로 접근할 수 있습니다.모니터에서 실행 중인 스레드가 특정 조건이 충족될 때까지 차단될 수 있습니다.스레드는 조건이 충족될 때 다른 스레드에 알릴 수 있습니다.  ..

Java 2024.11.12

Context switching

안녕하세요 오개발입니다. 공부하는 도중 Context switching이란 무엇인가 한번 공부를 해봤습니다.내가 이해 하는 내용으로 보자면 먼저 영어 자체의 해석으로 이해 하였다. 먼저 Context란 (동작, 작업들의 집합)을 (정의, 관리, 실행)하도록 하는 (최소한의 상태, 재료, 속성)을 포함하는 (객체, 구조체, 정보)이다. 다시 말해 Process의 경우 현재 프로세스가 중단 되었을 때, 중단된 시점 부터 다시 프로세스를 실행하기 위한 정보를 Context라고 부른다여기서 다시 말해 멀티 프로세스 개념이 나오는걸로 알고 있다.  Context Switching이란?작업의 주체가 현재 Context를 잠시 중단하고 다른 Context를 실행하는 것을 Context Switching이라 한다.  ..

DevOps 2024.11.12

에프랩(F-Lab) Java Backend 1개월 후기

국비지원 출신으로 처음 개발을 시작하였다. 판교에서 6개월 동안 자바 백엔드 국비지원 학원을 다녔고, 어찌어찌해서 첫 회사에 입사를 하였다, 입사해보니, Java언어가 아닌 PHP 개발을 하였다 거기서부터 나의 커리어는 PHP 개발자로 입문하였다. PHP 개발자들이 주변에 많이 있었다 하지만 다들 나이 때가 정말 많았다. 젊은 나이에 PHP 잘하시는 사람도 했던 분들도 잘 없다고 오히려 강점이라고 하였다 그 덕분인지 모를까 외주 개발 대부분 PHP로 개발을 하여 성공적으로 끝났다. 첫 회사에서 2년을 지나서 바로 쉽게 이직할 수 있었다. 무려 연봉도 직전 연봉에 +1000만원을 올려서 이직을 했다. 주변에서 이직할 때 쫌 쉬면서 이직하라고 했지만 금요일 퇴사후 바로 그 다음주 입사를 하였다. 조건과 규모..

일상 및 생각 2024.11.11

Thread와 Process의 차이

프로세스란.. 하나의 실행 단위를 이야기한다. 프로세스 전엔 프로그램이다 즉 메모리 영역엔 아직 안올라간 파일이다.프로그램을 실행하면 그 즉시 프로세스는 동작 한다. 이 상태를 동적인 상태라고 하는데 프로그램을 프로세스라고 하낟.프로세스 정의를 내일떄 실행되고 있는 컴퓨터 프로그램이라고 한다.    프로세스와 스레드의 작동 방식에 대한 더 자세한 설명위에서 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다고 언급했었다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.   이와 다르게 스레드는 메모리를 서로 공..

Java 2024.11.09

Java ConcurrentHashMap

개발을 하다보면 자주 사용하는 Map이 있다. Map 구현체Map 인터페이스의 구현체로 HashMap, HashTable, ConcurrentHashMap 등이 있다. 이 셋은 과연 어떤 차이가 있을까?   Key, Value에 Null을 허용? Permalink우선 HashMap 같은 경우 key와 value에 null값을 허용한다.@Test void hashmap() { Map hashMap = new HashMap(); hashMap.put("a", null); hashMap.put(null, "a"); assertThat(hashMap.get(null)).isEqualTo("a"); assertThat(hashMap.get("a"..

카테고리 없음 2024.11.09