1. 쓰레드와 프로세스의 차이 스레드는 하나의 프로그램안에서 여러 실행 흐름을 둔다. 가령 배틀그라운드라는 하나의 프로그램을 실행한다고 치자. 렌더링 작업만 하는 스레드 , 통신을 담당하는 스레드 입력을 처리하는 스레드 등 뭐 이런식으로 생각할 수 있다. 멀티 프로세스(가령 카톡 크롬 게임)는 독립적인 구조이다.(보통 그렇다는 이야기) 반면에 쓰레드는 공유하는 요소들이 있다. --> 이것때문에 컨텍스트 스위칭 비용(시간이)이 더 효율적이다. --> 캐쉬 메모리에 있는걸 그대로 갖다 쓰면 되니까 set을 할일이 별로 없고 get만 해오면 된다 메모리의 관점에서 스레드와 프로세스를 비교하는 것이 이해하기 쉽다. 프로세스는 생성하면 자체적으로 독립적인 메모리 공간을 가진다(그래서 통신이 필요하다면 IPC 인가..
아래의 내용은 윈도우 종속적 1. 커널 오브젝트란 무엇인가? IOCP와 같은 것들을 실습해보면서 자주 접한 용어 이다. 한마디로 정의하면 '커널에서 관리하는 데이터 블록' 프로세스가 생성이 되면 -> 프로세스를 관리하는 구조체변수가 생기고 -> 초기화 --> '커널 오브젝트' 그 밖에도 스레드를 생성할 때나, 프로세스들간의 통신을 위한 파이프 등을 생성할 때도 커널오브젝트를 생성한다. 이쯤되면 HANDLE 이라는 변수명을 본적이 있지 않나? 그것과 밀접한 연관이 있을 것이다. 2. 커널 오브젝트로 조작을 할 수 있는가? 일반적으로 우리가 직접 구조체의 내용을 변경하거나 하지는 못한다. 다만, 시스템 콜(System Call)을 이용해 간접적으로 조작이 가능하다. 어떻게 조작하나? 가령 프로세스의 우선순위..
1. 프로세스란 ? 아주 쉽게 말해서 실행중인 프로그램. 윈도우에서 .exe 파일을 실행 시켜본 기억은 누구나 있을 것이다. 그게 프로세스다. 2. 어찌 동작하는가? 프로그램을 실행하는 순간. 메모리에 할당이 이루어지고 (윈도우에서 메모리 점유율이 올라간다) 이 메모리 공간으로 바이너리 코드가 올라간다. 3. 무엇으로 이루어져 있는가? c, c++ 을 개발하는 프로그래머의 관점에서 생각해보자 프로세스를 구성하는 요소는 크게 4가지 Data 영역 : 전역변수 , static 변수의 할당 Stack 영역 : 지역변수 할당과 함수 호출 시 파라미터들, Heap 영역 : 동적 할당 (new, malloc) Code 영역 : 나머지 실행파일을 구성하는 명령어들이 올라가는 영역 하나의 프로세스당 저 4가지의 요소를..