코루틴을 이해하기 전에 알아야 할 개념: 동기 vs 비동기, 블로킹 vs 논블로킹코루틴을 이해하려면, 동기/비동기와 블로킹/논블로킹의 차이를 먼저 알아야 한다.1. 동기(Synchronous) vs 비동기(Asynchronous)동기: 어떤 작업이 시작되면, 그 작업이 끝날 때까지 다른 일을 하지 않고 기다려야 한다. 즉, 요청이 끝날 때까지 스레드는 그 작업에 묶여 있게 된다.비동기: 작업을 시작하고, 그 작업이 끝나기 전에 다른 일을 계속할 수 있다. 요청 결과가 언제 오든 상관없이 다른 작업을 할 수 있는 유연함이 있다.2. 블로킹(Blocking) vs 논블로킹(Non-blocking)블로킹: 스레드가 어떤 작업을 처리하는 동안 다른 작업을 하지 못하고 대기 상태에 빠진다. 이 경우, 스레드는 제..
전체 글
알고리즘 블로그CPU 스케줄링 알고리즘1. 비선점 스케줄링비선점 스케줄링은 일단 CPU를 할당받으면 작업이 끝날 때까지 CPU를 반환하지 않습니다. 대표적인 비선점 스케줄링에는 다음과 같은 방식이 있습니다.FCFS (First Come, First Served)작업 요청 순서대로 CPU를 할당합니다.단점: 짧은 작업이 긴 작업 뒤에 오는 경우, 대기 시간이 길어질 수 있습니다.2. 선점 스케줄링선점 스케줄링은 특정 조건에서 실행 중인 작업을 중단하고 다른 작업에게 CPU를 할당할 수 있습니다.SJF (Shortest Job First)다음에 처리할 작업 중 실행 시간이 가장 짧은 작업을 선택합니다.Starvation 문제가 발생할 수 있습니다.Round Robin각 작업에 동일한 시간(타임퀀텀)만큼 CPU를 할당하고,..
이번 포스트에서는 코틀린을 배우는 과정에서 컬렉션, 확장 함수, 함수형 프로그래밍, 스코프 함수에 대해 코틀린에서 이들을 다루는 방법에 대해 자세히 살펴보겠습니다.1. 컬렉션 (Collections)코틀린에서는 컬렉션을 만들 때 불변/가변을 지정해야 합니다. List, Set, Map에 대한 사용법이 변경되고 확장되었습니다. 자바와 코틀린 코드를 섞어 사용할 때 주의해야 합니다.불변 컬렉션:val immutableList = listOf(1, 2, 3)가변 컬렉션:val mutableList = mutableListOf(1, 2, 3)mutableList.add(4)자바와 코틀린 컬렉션 사용 시 주의사항:자바에서 코틀린 컬렉션을 가져갈 때는 불변 컬렉션을 수정할 수 있고, non-nullable 컬렉션에..
코틀린을 배우는 과정에서 클래스와 객체에 대해 이해하는 것은 매우 중요합니다. 이번 포스트에서는 코틀린에서 클래스, 프로퍼티, 생성자, 접근 지시자, 그리고 다양한 클래스 관련 기능들을 다루는 방법에 대해 자세히 살펴보겠습니다.1. 프로퍼티와 getter/setter코틀린에서는 필드를 만들면 getter와 (필요에 따라) setter가 자동으로 생성되며, 이를 프로퍼티라고 부릅니다. 또한, 주생성자가 필수이며, constructor 키워드를 사용해 부생성자를 추가로 만들 수 있습니다.프로퍼티 예제:class Person(val name: String, var age: Int)커스텀 getter와 setter:실제 메모리에 존재하는 것과 무관하게 커스텀 getter와 setter를 만들 수 있으며, 무한 ..
코틀린을 배우는 과정에서 제어문, 반복문, 예외 처리, 함수에 대해 이해하는 것은 매우 중요합니다. 이번 포스트에서는 코틀린에서 제어문, 반복문, 예외 처리, 그리고 함수를 다루는 방법에 대해 자세히 살펴보겠습니다.1. 제어문 (if, if-else, if-elseif-else)코틀린에서는 제어문이 자바와 동일한 문법을 사용하지만, 코틀린에서는 제어문이 Expression으로 취급됩니다.if/if-else/if-elseif-else 문법val max = if (a > b) a else bExpression으로 취급: 코틀린에서는 삼항 연산자가 없으며, if-else가 Expression으로 사용됩니다.when 문법: 자바의 switch는 코틀린에서 when으로 대체되며, 더 강력한 기능을 갖습니다.whe..
코틀린에서 변수와 타입, 연산자를 다루는 방법코틀린을 배우는 과정에서 변수와 타입, 연산자에 대해 이해하는 것은 매우 중요합니다. 이번 포스트에서는 코틀린에서 변수, null, 타입, 그리고 연산자를 다루는 방법에 대해 자세히 살펴보겠습니다.1. 코틀린에서 변수를 다루는 방법코틀린에서 변수를 선언할 때는 var와 val 키워드를 사용합니다. var는 변경 가능한 변수를 의미하며, val은 불변 변수를 의미합니다.var: 변경 가능한 변수 선언var mutableVariable: String = "Hello"mutableVariable = "World"val: 변경 불가능한 변수 선언val immutableVariable: String = "Hello"// immutableVariable = "World"..
프로세스와 스레드의 개념프로세스는 쉽게 말해, 우리가 작업 관리자를 열었을 때 보이는 프로그램 하나하나를 의미한다. 프로세스는 운영체제가 관리하는 하나의 독립적인 실행 단위로, 고유한 메모리 공간을 가지며 CPU, 메모리, 파일 핸들 등의 자원을 할당받아 독립적으로 실행된다. 멀티코어 CPU 환경에서는 여러 프로세스가 동시에 실행될 수 있어, 여러 작업을 병렬로 처리하는 것이 가능하다. 이는 멀티태스킹 환경에서 중요한 역할을 한다.스레드는 한 프로세스 내에서 실행되는 가벼운 실행 단위다. 프로세스는 생성 및 관리 비용이 높은 반면, 스레드는 상대적으로 비용이 낮다. 스레드는 같은 프로세스 내에서 메모리와 자원을 공유하여 효율적인 실행이 가능하다. 예를 들어, 웹 브라우저의 각 탭이 별도의 스레드로 실행되..
Virtual Thread: Java 동시성의 혁신Java는 JDK 21에서 가상 스레드(Virtual Thread)라는 기능을 도입했습니다. 이 기능은 전통적인 스레드 모델의 한계를 해결하여 더 많은 동시성을 효율적으로 처리할 수 있도록 합니다.전통적인 Java 스레드 이해하기전통적인 Java 스레드 모델에서는 각 스레드가 OS 커널 스레드와 연결됩니다. Java 스레드를 생성할 때, Java Native Interface(JNI)를 통해 커널 스레드를 할당합니다. 이러한 모델은 특히 많은 스레드를 처리해야 하는 상황에서 높은 오버헤드를 초래합니다.전통적인 스레드의 주요 특성:스택 크기: 약 2MB생성 시간: 약 1ms컨텍스트 스위칭 시간: 약 100µs전통적인 스레드는 프로세스보다 가볍지만, 여전히 ..