기록은 기억을 이기고 시간보다 오래 남는다.
반응형

분류 전체보기 78

Reader-Writer Lock

안녕하세요, 준준입니다. 이번 게시물에서는 **RwLock(Read-Write Lock)**에 대해 알아보겠습니다. RwLock은 읽기와 쓰기의 동시 접근을 관리하기 위한 동기화 메커니즘입니다.여러 스레드가 데이터를 읽을 때는 동시에 접근할 수 있지만,데이터를 쓸 때는 오직 하나의 스레드만이 접근할 수 있도록 하는 기능을 제공합니다.아래의 그림을 보면 이해가 쉬우실까요? 왜 필요한가요? 일반적으로 데이터는 읽기가 빈번하게 일어나고쓰기는 그다지 자주 발생하지 않는 경우가 많습니다. 매번 Lock을 걸어둔다면 쓰기 작업이 거의 없는 상황에서도불필요한 경합(Contension)이 발생할 수 있습니다. RwLock은 이러한 상황에서 효율적으로 동작하여 성능을 향상할 수 있습니다.  RwLock의 주요 특징은 다..

게임 서버 2024.05.29

Lock 이란

만약 하나의 공유 자원에 여러 개의 쓰레드가 접근을 했을 경우그 자원의 값이 뒤죽 박죽이 될 수 있으니 한 쓰레드가 그 자원을 독점 할 수 있도록 도와 준다. Lock 구현 방법으로는 3가지가 있다. 1.Spin lock   - 이 방법은 해당 자원의 임계영역이 풀릴 떄 까지 무작정 기다리는 것을 말한다.   - 무식한 방법이지만 임계영역이 금방 풀릴 것이 기대가 있다면 사용하기 좋다.       하지만 임계영역이 풀리지 않는 다면 매우 비효율적이다.   - 하지만 cpu 점유가 높아 지고 다른 쓰레드를 방해할 수 있다.아래는 Spin lock의 예시이다.#include #include #include std::atomic_flag lock = ATOMIC_FLAG_INIT; // std::atomic_..

[c++] Future 병렬 처리 방법

Future은 직렬 방식의 단순한 처리 방법에서 병렬로 동시에 처리 할 수 있도록 하는 기능이다.C++11에서 추가된 std::future은 비동기 계산을 가능하게 해주는 기능입니다.이를 통해 현재 스레드에서 계산이 끝나지 않은 작업을 다른 스레드에서 계속 수행할 수 있습니다.결론)mutax, condition_variable까지 가지 않고 단순한 애들을 처리할 수 있는 (일회성으로 일어나는)\ future 객체를 만드는 방법은 여러가지 방법이 있음 특히나 , 한 번 발생하는 이벤트에 유용하다. 1)async = 원하는 함수를 비동기적으로 실행 2)promise =  결과무를 promise를 통해 future로 받아줌 3)packaged_task = 원하는 함수의 실행 결과를 packaged_task를 ..

[C++] 캐시란 무엇일까? cash (예시 코드 포함)

안녕하세요 준준입니다.오늘은 캐시에 대해서 알아보고 코드를 이용해서 실제 캐시가 어떻게 작동하는지 알아가는 시간을 가지도록 하겠습니다.캐시란 무엇일까?캐쉬는 저장된 데이터를 더욱 빠르게 접근하기 위해 cpu 안에 존재하는 메모리입니다.CPU가 메인 메모리를 읽거나 쓰고자 할 때, 먼저 그 주소에 해당하는 데이터가 캐시에 존재하는지 살피고 데이터가 존재한다면 직접 캐시를 읽고 존재하지 않는다면 메인 메모리에 접근합니다. 이 경우 CPU는 메인 메모리에 직접 접근해서 전송된 데이터를 캐시에 복사해 넣음으로써 다음에 CPU가 더 빠르게 데이터를 찾을 수 있게 도와줍니다. 캐시는 임시 저장소라고 생각하시면 됩니다.  캐시가 필요한 이유cpu는 매우 빠른 속도로 연산이 되는데 연산 속도보다 데이터를 가지고 오는 ..

[c++] fetch_add() 함수

fetch_add()는 원자적(atomic) 연산 중 하나입니다. C++11에서 추가된 C++ 표준 라이브러리의 std::atomic 클래스의 멤버 함수 중 하나로, 특정 변수에 대한 원자적인 덧셈 연산을 수행합니다. fetch_add()는 특정 변수의 값을 가져온 후에 해당 변수에 인자로 전달된 값을 더하고, 그 결과를 반환합니다.  이 과정에서 해당 변수는 다른 스레드에 의해 변경되지 않는 원자적인 연산이 보장됩니다. 예를 들어, 다음 코드는 x 변수에 대해 fetch_add() 함수를 사용하여 1을 더하는 코드입니다. 위 코드는 x 변수의 값을 1 증가시키고, 그 결과를 result 변수에 저장합니다.fetch_add() 함수는 원자적 연산이므로 다른 스레드가 x 변수를 변경하더라도결과에는 영향을 ..

[C/C++] Stack in c++ (기본 사용법, 예제)

안녕하세요 준준 입니다. 오늘은 C++ STL 중 하나인Stack(스택)에 대해 알아보도록 하겠습니다.What is Stack?스택의 사전적 의미로는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯 데이터를 쌓는 자료 구조라고 할 수 있습니다. 스택은 대표적인 LIFO (Last In First Out) 구조입니다.따라서 제일 마지막에 넣은 데이터가 가장 먼저 빠져나가는 것을 알 수 있습니다.쉬운 예시로 쌓여 있는 그릇을 생각하시면 쉽습니다. 상식적으로 그릇은 쌓을 때 맨 위에서부터 쌓고 꺼낼 때는 맨 위에부터 꺼내곤 합니다.따라서 가장 최근에 넣은 그릇을 가장 빨리 쓰게 됩니다.이해가 조금 되셨을 까요?Stack의 특징1. 먼저 들어간 자료가 나중에 나오는 구조2. 시스템 해킹에서 버퍼오버플로우 ..

HTML 태그 소개: 기본 HTML 태그 이해

제목 태그: ~ 문서 구획 제목을 나타내는 태그, Heading 태그라고 부름.h1 태그는 페이지 내에서 “한 번만” 사용되어야 하고, “구획의 순서”를 지켜야 한다.메인 제목서브 제목문단 태그: 하나의 문단을 나타내는 태그.제목 태그와 함께 사용되기도 하고, 단독으로 사용되기도 한다.이것은 문단입니다.글씨의 두께 조절: , : 의미를 가지지 않고, 단순히 굵은 글씨로 변경.: 굵은 글씨로 변경 후 “강조”의 의미를 부여.이것은 굵은 글씨입니다.이것은 중요한 굵은 글씨입니다.글씨의 기울기 조절: , : 기울임과 동시에 텍스트가 문단의 내용과 구분되어야 하는 경우 사용.: 기울임과 내용에 “강조”를 나타냄.기울어진 글씨입니다.강조된 기울어진 글씨입니다.링크 태그: 클릭하면 페이지를 이동할 수 있는 링크 ..

HTML 입문: 웹 페이지의 구조와 핵심 요소 이해

HTML 기초: 웹 페이지의 기본 구조와 요소 이해하기HTML(Hypertext Markup Language)은 웹 페이지를 구성하는 가장 기본적인 빌딩 블록입니다. 이 글에서는 HTML의 기본 구조, CSS와 JavaScript의 역할, 그리고 HTML의 주요 태그들에 대해 알아보겠습니다.HTML의 핵심 구성 요소HTML: 웹 페이지의 구조를 정의합니다.CSS (Cascading Style Sheets): 웹 페이지를 스타일링하고 꾸미는 데 사용됩니다.JavaScript: 웹 페이지에 동적 기능을 추가합니다.HTML 기본 문법HTML 문서는 여러 태그를 사용하여 구성됩니다. 각 태그는 특정 요소를 나타내고, 시작 태그와 종료 태그로 구성됩니다. 예를 들어, 태그는 블록 레벨 요소를 생성하며, 콘텐츠와..

반응형