운영체제/뇌를 자극하는 윈도우즈 시스템 프로그래밍

스레드 풀스레드 풀에 대한 이해스레드 풀이 필요한 이유스레드 생성은 쉬운 작업이 아니다. 그래서 매번 요구되는 일에 대해 스레드가 새로 생성되고 할당되면 굉장히 부담스럽다. 또한 요구된 일들을 동시에 처리되는 게 아니라 시간적인 텀을 두고 처리해도 된다면 하나의 스레드를 생성하고 이 스레드가 요구된 일들을 다 처리한다면 스레드를 또 만들 필요가 없다.그래서 미리 스레드를 만들어두고 이 스레드를 스레드 풀에 저장해 두다가 요청이 오면 스레드 풀에서 스레드를 꺼내서 요청에 스레드를 할당한다. 요청한 작업이 완료되면 해당 스레드를 풀에 반환한다. 즉 적정한 수의 스레드를 미리 생성해서 풀에 저장하고 일이 들어올 때마다 스레드를 꺼내 사용하고 다 사용하면 다시 반환한다. 이러한 작업을 통해 성능을 향상할 수 있..
스레드 동기화 기법2순서 동기화 즉 순서를 조절하겠다는 소리다.순서를 동기화하는 이유가 무엇인지 아는 게 중요하다.생산자/소비자 모델데이터 입력받고 입력된 데이터 출력 구조이다.입력된 크기만큼 출력되기 때문에 출력이라는 것은 입력에 의존적이다.반면 입력은 외부 환경에 의존적이다.여기서 발생할 문제는 10B씩 입/출력을 하다가 어느 순간 10MB가 한 번에 들어오면 10MB 데이터를 처리하다가 손실이 일어날 수 있다.계속 읽기만 하면 손실이 없다. 언제 문제가 발생하냐면 읽고 출력을 하는 게 문제이다 출력하는 와중에도 데이터가 계속해서 들어오면 감당이 안 돼서 이러한 과정에서 손실이 발생할 수 있다.그래서 위 이미지와 같이 입출력 모델을 설계한다.입력 스레드는 계속해서 입력을 받고 출력용 버퍼에다가 데이터..
스레드 동기화 기법1스레드 동기화란 무엇인가?동기화는 2가지 측면이 있다.메모리 접근에 대한 동기화A, B 스레드가 존재 이 두 스레드가 동시에 한 메모리에 접근하면 문제가 발생함메모리에 접근하기 위해서는 프로그램 코드를 통해 접근한다.그래서 둘 이상의 스레드가 동시에 메모리에 접근하도록 원인을 제공하는 코드 블럭을 가리켜 임계영역이라 한다.이러한 임계영역은 한순간에 하나의 스레드만 실행할 수 있도록 허용해야 한다.그래서 둘 이상의 스레드가 동시에 접근하는 거를 막아야 한다. 이것이 바로 동기화다.임계영역 ⇒ 메모리 접근 동기화가 필요임계영역에 접근하는 것을 동기화한다는 것은 한순간에 하나의 스레드만 접근하도록 하겠다. 이것이 바로 임계영역에 대한 메모리 접근 동기화다.실행순서의 동기화메모리에 접근하는 ..
스레드의 생성과 소멸Windows에서의 스레드 생성과 소멸windows에서 사용할 수 있는 가장 기본적인 스레드 생성 함수는 CreateThread이다.dwStackSize스레드 생성과 동시에 독립적인 스택을 할당받는데 이때 스택의 사이즈 결정짓는 요소다.lpStartAddress함수를 가리킬 수 있는 포인터이다.스레드 동작하기 위한 함수. 다시 말해서 스레드의 main 역할을 하는 함수를 지정하는 전달인자이다.lpParameter스레드 함수에 전달할 인자를 지정하는 용도로 사용한다.매개변수 lpStartAddress가 가리키는 함수 호출 시 전달할 인자를 지정하는 것이다.main 함수에서 argv로 문자열이 전달되는 것과 유사하다.생성가능한 스레드 개수는?“메모리가 허용하는 만큼”스레드가 생성될 때마다..
an_jjin
'운영체제/뇌를 자극하는 윈도우즈 시스템 프로그래밍' 카테고리의 글 목록 (2 Page)