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

개발 26

TLS(Thread Local Storage) with c++

Tread Local Storage한 줄 요약- TLS는 스레드 내부에 스레드 본인만 접근할 수 있는 별도의 저장 공간안녕하세요 준준입니다. 오늘은 TLS에 대해 알아보도록 합시다.TLS(Tread Local Storage) 우선 TLS란 Tread Local Storage의 약자로각 쓰레드가 가지고 있는 자신만의 고유한 공간입니다. 왜 TLS가 만들어지고 필요할까요?Data 영역의 전역 변수, Heap 영역의 객체는 모든 스레드가 공유합니다.그리고,Stack 영역의 지역 변수는 해당 블록 내에서만 사용되기 때문에 기본적으로 각각의 스레드마다 고유하게 가지는 메모리 영역이 없습니다.  또한,스택에 잡히는 지역 변수는 스레드마다 별도의 스택을 사용하므로 당연히 다른 값을 가지지만전역 변수의 경우에는 모든 ..

게임 서버 2024.05.29

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++] 캐시란 무엇일까? 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 변수를 변경하더라도결과에는 영향을 ..

디지털 정보의 표현

디지털 정보의 표현 비트(bit; binary digit) -컴퓨터에서 디지털 회로의 조합으로 정보를 표현할 때 이용되는 가장 작은 단위 -논리적으로 두 가지 중 한가지(켜짐/꺼짐) 상태를 가지는 것 컴퓨터에서 표현하는 모든 정보는 비트를 모아서 이루어짐-즉, 이진수로 표현된 -이러한 이진표현을 어떻게 해석하느냐에 따라 정수, 실수, 문자열 등등을 나타냄 바이트(byte) -8개의 비트를 모아서 만든 단위 컴퓨터에서 데이터의 크기 단위 -K(kilo) 10^3=1000 | 2^19=1024 -M(mega) 10^6= 1,000,000 | 2^20=1,048,576 -G(giga) 10^9=1,000,000,000 | 2^39 =1,073,741,824 -T(tera), p(peta), E (exa), Z..

Computer Science 2024.04.17

[C++]size_t 와 string::npos란 무엇일까?

안녕하세요 준준입니다. 이번 게시글에서는 size_t와 string::npos에 대해서 알아보도록 하겠습니다. size_t란? size_t는 C++ 표준 라이브러리에서 정의된 데이터 타입으로, 부호 없는 정수형(unsigned integer)으로 사용됩니다. size_t는 보통 메모리 할당, 배열 인덱스, 문자열 길이 등을 나타내는데 사용됩니다. size_t는 각각의 플랫폼에서 동일한 크기를 가지도록 보장되어 있으며, 대부분의 컴파일러에서는 32비트에서는 4바이트, 64비트에서는 8바이트로 정의되어 있습니다. string::npos란? string::npos는 C++ 표준 라이브러리에서 제공하는 상수로, 문자열에서 해당 문자열이 존재하지 않는 경우를 나타내는 값입니다. 예를 들어, string::find..

[C++] pow, sqrt 함수란?(루트함수, 제곱, 제곱근)

안녕하세요 준준 입니다. 이번 개시글에서는 pow() 함수와 sqrt() 함수에 대해 알아보도록 합시다. 간단하게 제곱과 제곱근과 관련이 되어 있습니다. 우선 이 함수들를 사용하기 위해서는 #include 헤더 파일을 선언해 주어야 합니다. c++에서의 pow 함수 원형은 아래와 같습니다. 1. double pow(double base, double n) 2. float pow(float base, float n) 3. long double pow(long double base, long double n) -pow의 기능 base가 되는 함수를 n만큽 제곱을 해줍니다. -pow 사용법: 12에 2제곱을 구한다면 -> pow(12,2); 5.5에 9.9제곱을 구현다면 ->pow(5.5,9.9); 다음으로 ..

반응형