멀티

    멀티 프로세싱 vs 멀티 프로그래밍 vs 멀티 태스킹 vs 멀티 스레딩

    멀티 프로세싱 (Multi processing)다수의 프로세서가 협력적으로 일을 처리하는 것이다. 프로세서는 CPU나 Microprocessor라는 하드웨어를 의미하며, 프로세스는 실제 메로리에 적재되어 프로세서에 의해 실행되고 있는 프로그램이다. 보통 하나의 프로세서 (CPU)가 하나의 작업을 맡지만 멀티 프로세싱은 다수의 프로세서가 다수의 작업을 함께 처리하는 것이다. 멀티 프로세싱의 장점은 하나의 프로세서가 고장이 나더라도 해당 프로세서가 진행 중인 작업은 다른 프로세서에서 수행하고 있기 때문에 작업이 정지되지 않는다, 또한, 여러 개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용한다면 각 데이터를 각 프로세서에게 할당할 필요 없이 하나의 공간에 데이터를 저장한 후 이를 공유하여 사용하도록 한..

    C# 원자적 연산 (Interlocked 클래스)

    Interlocked 클래스는 int 형 값을 증가시키거나 감소시키는데 사용한다. 멀티 스레드 환경에서 하나의 int 형 전역 변수를 공유한다고 생각해보자. 이런 경우에 A 쓰레드와 B 쓰레드가 값을 동시에 읽어와서 B 쓰레드가 수정한 값을 저장하고, A 쓰레드가 다시 수정한 값을 저장하게 되면 B 쓰레드의 변경사항을 잃어버리게 된다. 지금까지 이러한 자원의 동기화를 위해서 모니터나 뮤텍스를 사용하는 방법을 설명했지만 간단한 int 형의 값을 여러 쓰레드가 공유하는 것이 일반적이기 때문에 이러한 작업을 캡슐화한 클래스를 제공한다. Interlocked 클래스는 System.Threading 클래스에 있으며 주요 멤버는 다음과 같다. 메소드 이름 설 명 CompareExchange 두 대상을 비교하여 값이..

    C++ 원자적 연산 (atomic)

    뮤텍스를 통해서 전역 변수를 동기화하여 하나씩 증가시킬 수 있다. 그러나 뮤텍스와 같은 lock을 이용하여 개발하는 경우, 사용자가 잘못 사용할 때 교착 상태와 같은 문제를 야기시킬 수 있다. C++11에서는 atomic을 이용하여 뮤텍스와 같이 lock, unlock을 사용하지 않고 값을 증가시키거나 값을 감소시킬 수 있는 기능을 제공하고 있다. atomic : atomic 변수를 선언할 수 있는 데이터형. fetch_add : atomic의 멤버 함수로, 값을 증가시키는 함수. fetch_sub : atomic의 멤버 함수로, 값을 감소시키는 함수. atomic으로 설정된 변수에는 초기에만 값을 대입할 수 있다. 그 이외에는 대입이 불가합니다. 대신 값을 증가, 감소 시키는 역할만 수행한다. 그 이유..

    데드락 (Deadlock) 의미 & 조건

    데드락(Deadlock)이란? 멀티 프로그래밍 또는 멀티 스레드 환경에서는 여러 프로세스 또는 스레드가 한정된 자원을 동시에 사용하기 위해 항상 경쟁 상태에 놓여 있고 프로세스가 필요한 자원을 획득하지 못하고 영원히 자원을 기다리는 상태이다. 시스템 모델 설명 자원이란 CPU, 파일, 메모리, 락객체(세마포어나 뮤텍스 같은 Synchronize Object) 등등 컴퓨터 시스템에서 여러분이 사용할 수 있는 모든 것들을 총칭하는 추상적인 용어다. 요청(Request) : 프로세스가 특정 자원을 시스템에게 요청하면 시스템은 현재 이 자원이 사용 가능하다면 프로세스에게 할당 한다. 불가능하다면 자원이 사용 가능해 질 때까지 기다린다(Wait state). 사용(Use) : 자원에 대한 허가가 떨어지면 프로세스..

    멀티 스레드 (Multi Thread) 소스코드

    병렬처리 기법중 하나로 cpu안에 있는 여러개의 코어를 이용해서 더욱더 빠른 연산을 하게하는 기법이다. #include #include #include #include using namespace std; // 임계 영역 mutex mtx; //mutual exclusion int main() { // 여러가지 일을 동시에 처리 // cout이 깨지지않게 실행시키기 위해서 // mutex를 이용해 cout을 lock시키고 다 실행되면 // unlock하는 식으로 이용한다. auto work_func = [](const string& name) { for (int i = 0; i < 5; i++) { this_thread::sleep_for(chrono::milliseconds(100)); mtx.lock..

    [DX11 물방울책] 챕터 4 - Direct3D 초기화

    1. Direct3D는 무엇인가? 로우레벨 그래픽스 API이며 3D 그래픽을 구현해서 화면에 출력할 수 있게끔 os와의 중간 다리 역할을 해준다. 2. COM 객체 컴포넌트 오브젝트 모델 (COM)은 독자적으로 그 전 버전들과 호환이 가능한 포인터이며 인터페이스다. COM 객체 포인터를 획득하기 위해선 특수 함수로부터 가져와야 한다, new 불가능. 다 사용했다면 Release 함수를 통해 제거해준다. delete 하면 뻥 날 수가 있다. 3. 텍스처와 데이터 리소스 확장명 2D 텍스처는 데이터의 행렬이다, 사용 용도 중 하나는 이미지 데이터 용이다. (이미지의 각 픽셀 색상에 대한 정보 저장) 매핑이라는 고급 기술에는 색상 대신 3D 벡터를 저장한다. 그리고 오직 DXGI_FORMAT형만 저장이 가능하..