고랭
-
라이브락(Livelock)이란?Computer Science/OS 2024. 4. 4. 21:59
1. 라이브락이란?🤷♂️ 라이브락은 무엇인가요?라이브락(Livelock) 은 데드락처럼 시스템이 진행되지 못하는 상태이지만, 프로세스들이 계속해서 상태를 바꾸며 활동은 하고 있는 상태를 말합니다.즉,데드락: 아예 멈춤 (가만히 기다림)라이브락: 계속 움직이지만 아무것도 못함 (헛돌기)🍽️ 현실 비유로 이해하기두 사람이 좁은 복도에서 서로 마주쳤다고 해보세요.A가 오른쪽으로 비킴동시에 B도 오른쪽으로 비킴다시 둘 다 왼쪽으로 비킴또다시 오른쪽으로…계속 피하려 하지만, 서로 계속 겹치면서 아무도 앞으로 가지 못함이게 바로 라이브락이에요. 🔁 데드락 vs 라이브락2. 라이브락 예시코드 구현에 앞서라이브락을 명확히 보여주는 코드 예시는 데드락보다 구현하기 어렵습니다. 라이브락의 상황을 설명하기 위해, 두..
-
프로토타입 패턴(Prototype Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 4. 2. 22:35
1. 프로토타입 패턴이란? 프로토타입 패턴은 생성 디자인 패턴의 한 종류로, 기존 객체를 복제하여 새 객체를 생성하는 방식입니다. 이 패턴은 특히 객체 생성 비용이 크거나 복잡한 경우, 또는 클라이언트가 객체의 타입을 미리 알 수 없는 경우에 유용합니다. 프로토타입 패턴은 원본 객체의 정확한 복사본을 제공함으로써, 새 객체의 생성과 초기화 과정을 단순화합니다. 2. 프로토타입 패턴은 주로 어디에 쓰이나? 프로토타입 패턴은 다음과 같은 상황에서 주로 사용됩니다: 객체 생성 비용이 높고, 비슷한 객체가 여러 개 필요한 경우 객체의 타입이 런타임에 결정되는 경우 클론을 지원하여 객체의 상태를 쉽게 복제할 수 있는 경우 이 패턴은 게임 개발에서 캐릭터, 아이템 등의 인스턴스를 만들 때나, 소프트웨어 개발에서 설..
-
golang: 포인터(Pointer)란?Back-End/Golang 2024. 3. 30. 12:34
Go 언어에서 포인터는 변수의 메모리 주소를 저장합니다. 포인터를 사용하면, 변수의 메모리 주소를 통해 직접 변수의 값을 읽거나 수정할 수 있습니다. 이는 데이터를 효율적으로 처리할 수 있게 하며, 특히 큰 데이터 구조를 다룰 때나 함수 간에 데이터를 전달할 때 유용합니다.포인터의 기본 개념:포인터 선언: * 키워드를 사용해 포인터 타입을 선언합니다. 예를 들어, var p *int는 정수형 변수의 메모리 주소를 저장할 수 있는 포인터 p를 선언합니다.주소 연산자 &: 변수 앞에 &를 붙여 해당 변수의 메모리 주소를 얻습니다.역참조 연산자 *: 포인터 앞에 *를 붙여 포인터가 가리키는 메모리 주소의 실제 값을 얻습니다.코드 예시: 포인터 사용하기아래 코드는 포인터를 사용하여 변수의 값이 함수에 의해 어떻..
-
golang: 컨텍스트(Context)란?Back-End/Golang 2024. 3. 30. 12:13
Go 언어에서 context 패키지는 고루틴 간에 데이터, 취소 신호, 타임아웃 등을 전파하는 데 사용됩니다. context.Context 인터페이스는 요청 처리에 필요한 모든 정보를 담고, 고루틴의 실행 제어를 가능하게 합니다. 이는 주로 API 호출, 데이터베이스 요청 등의 작업을 취소하거나, 작업의 마감 시간(deadlines)을 설정하고, 요청 스코프의 값(value)을 전달하는 데 유용합니다. Context의 주요 사용 사례: 요청 취소: 사용자 요청 취소나 타임아웃 시, 모든 관련된 작업을 중단시킵니다. 타임아웃 설정: 특정 작업에 대한 최대 실행 시간을 지정합니다. 값 전달: 요청 스코프에 있는 데이터를 여러 고루틴 사이에서 전달합니다. Context 사용 예제: 아래 예제에서는 contex..
-
golang: 채널(Channel)이란?Back-End/Golang 2024. 3. 30. 12:10
채널(Channel)은 Go 언어의 핵심 기능 중 하나로, 고루틴 간에 데이터를 안전하게 주고받을 수 있는 통신 메커니즘입니다. 채널을 사용하면 고루틴 사이에서 동기화 없이 데이터를 전달할 수 있으며, 이는 동시성 프로그래밍에서 발생할 수 있는 복잡한 문제들을 효과적으로 해결할 수 있게 해줍니다. 채널의 특징: 타입 안전성: 채널은 특정 타입의 데이터만을 전송할 수 있으며, 이는 프로그램의 안정성을 높여줍니다. 동기화: 채널을 통해 데이터를 보내거나 받을 때, Go 런타임은 이 과정이 안전하게 이루어지도록 자동으로 동기화를 관리합니다. 블로킹과 넌블로킹 동작: 채널은 기본적으로 블로킹(Blocking) 동작을 합니다. 데이터를 보내거나 받을 준비가 되지 않았을 경우, 해당 고루틴은 대기 상태에 머물게 됩..
-
golang: 고루틴(Goroutines)이란?Back-End/Golang 2024. 3. 30. 12:02
고루틴(Goroutines)은 Go 언어에서 동시성(concurrency)을 구현하는 핵심적인 부분입니다. 간단히 말하자면, 고루틴은 Go에서 실행되는 경량 스레드(lightweight threads)와 유사합니다. 하지만 전통적인 스레드에 비해 훨씬 적은 메모리를 사용하며, 쉽게 수천 개 이상을 생성하고 관리할 수 있습니다. 고루틴은 Go 런타임에 의해 관리되며, 고루틴 사이의 통신은 주로 채널(Channels)을 통해 이루어집니다. 고루틴의 특징: 경량: 고루틴은 매우 작은 메모리 스택을 사용하여 시작되며, 필요에 따라 동적으로 확장됩니다. 비동기 실행: 고루틴은 비동기적으로 실행됩니다. 즉, 메인 프로그램의 실행을 차단하지 않고 동시에 실행될 수 있습니다. 쉬운 생성: go 키워드를 사용하여 함수 ..