분류 전체보기77 뮤텍스, 세마포어, 모니터 뮤텍스(Mutex) 뮤텍스는 상호배제를 위한 동기화 기법이다. 한 순간에 오직 하나의 스레드만 공유자원에 접근할 수 있도록 보호한다. 뮤텍스는 임계영역에 진입할 때 락을 걸고, 임계영역에서 나올 때 락을 해제한다. 세마포어(Semaphore) 세마포어는 공유자원의 접근을 제한하는 동기화 기법이다. 여러개의 스레드가 동시에 공유자원에 접근할 수 있지만, 제한된 개수의 스레드만이 동시에 접근할 수 있도록한다. 세마포어는 정수형 변수로 선언하며, 이 변수를 통해 스레드의 접근을 제어한다. 세마포어는 두 가지 연산을 제공한다. P(wait) 연산은 세마포어 값을 감소시키고, 0 이하가 되면 스레드를 블록한다. V(signal) 연산은 세마포어 값을 증가시키고, 블록된 스레드 중 하나를 깨운다. 모니터(Monit.. 2023. 3. 1. 클래스 로더, 클래스 로딩 클래스 로더(ClassLoader) Java 프로그램이 실행될 때 클래스 파일을 로드하는 데 사용되는 핵심 구성요소. Java ClassLoader는 Java 클래스 파일을 JVM에 로드하여 해당 클래스를 사용할 수 있도록 합니다. Bootstrap ClassLoader JVM에는 먼저 Bootstrap ClassLoader가 로드된다. 이 ClassLoader는 Java 표준 라이브러리에 포함된 클래스 파일을 로드한다. Extension ClassLoader Java 확장 라이브러리를 로드하는데 사용된다. System ClassLoader 사용자가 작성한 클래스 파일을 로드하는 데 사용된다. 클래스 로딩(Class Loading) JVM이 클래스 파일을 읽어들이는 과정. 1. 로딩 클래스 로더가 클래스.. 2023. 3. 1. [LeetCode] Longest Substring Without Repeating Characters - (Kotlin) https://leetcode.com/problems/longest-substring-without-repeating-characters/description 처음 방법은 Map을 이용해서 인덱스를 관리하면서 해결했다. 중복키가 나오면 맵을 지우고 인덱스를 처음 중복된 곳 바로 앞으로 가도록 했다. var max = 0 var i = 0 val map = hashMapOf() while (i < s.length) { if (map.containsKey(s[i])) { i = map[s[i]]!! + 1 max = max(map.size, max) map.clear() } map[s[i]] = i++ } max = max(map.size, max) return max 정답은 맞았지만, Solutions를 .. 2023. 3. 1. [모던 자바 인 액션] 리액티브 프로그래밍 리액티브 프로그래밍 리액티브 프로그래밍에서는 다양한 시스템과 소스에서 들어오는 데이터 항목 스트림을 비동기적으로 처리하고 합쳐서 문제를 해결한다. 이런 애플리케이션은 발생한 데이터 항목을 바로 처리함으로 사용자에게 높은 응답성을 제공한다. 1. 리액티브 매니패스토 리액티브 매니패스토reactive manifesto(https://www.reactivemanifesto.org)에 리액티브 애플리케이션과 시스템 개발의 핵심 원칙을 정의한다. 반응성(responsive) 일정하고 예상할 수 있는 반응시간을 제공한다. 회복성(resilient) 장애가 발생해도 시스템은 반응해야 한다. 탄력성(elastic) 작업 부하가 발생하면 자동으로 관련 컴포넌트에 할당된 자원 수를 늘린다. 메시지 주도(Message-dr.. 2023. 2. 4. 이전 1 2 3 4 5 6 7 ··· 20 다음