반응형
ㅇ용어의 정리
- 프로세스 (Process) : 메모리를 비롯한 각종 리소스를 담고 있는 정적인 개념.
- 스레드 (Thead) : 실제 CPU 시간을 할당받아 수행되는 실행단위. 동적인 개념. 프로그램 실행시 생성됨.
* 프로그램은 프로세스로 생성되는데, 멀티스레드로 구현한다고해서 프로세스를 여러개 생성해서 만드는것이 아님. 프로세스는 프로그램 한개당 하나 뿐!! (정적인개념이라고 설명한 이유)
스레드를 다중으로 만들어서 여러 작업을 처리하도록 구현 함. (동적인 개념.)
- 주 스레드(Main Thread) : Winmain() / main() 함수에서 시작되는 스레드.
* 회사에서 사장과 사원들이 있고, 사장이 없으면 회사가 망하는것처럼, 주 스레드 아래 하위 스레드들이 작업중에 주 스레드가 멈춰버리면 하위 스레드가 작업중이더라도 모든 작업이 끝나게 됨.
- 컨텍스트 전환(Context Switch) : CPU 운영체제의 협동으로 이뤄지는 스레드 실행상태의 저장과 복원 작업.
* CPU 시간을 여러개의 스레드가 나눠씀.
1,2,3번 스레드가 순서대로 1초씩 쓴다고하면, 1번 스레드는 2초를 기다려야 다시 쓸수있다.
초라는 단위로보면 엄청 길어보이지만, CPU의 시간단위로 매우 짧게 텀을 잡으면, 사람이 인식하지 못할정도의 속도로 연산처리가 가능함.
전환과정)
1. 1번 스레드가 CPU 사용중
2. 1번 스레드 CPU 할당시간 종료. -> 1번스레드의 정보를 레지스터에 저장.
3. 2번 스레드가 CPU 사용.
4. 2번 스레드 CPU 할당시간 종료. -> 2번스레드의 정보를 레지스터에 저장.
-> 1번 스레드의 레지스터 정보 다시 가져와 CPU 사용.
- 반복 -
ㅇ 스레드 생성에 필요한 필수 요소!
- 스레드 함수의 시작주소(함수이름)
- 스레드 함수 실행시 사용할 스택영역 크기.
ㅇ CreateThread() 함수
- 스레드를 생성한 다음 스레드를 제어할 핸들값을 리턴해 줌.
ㅇ 스레드함수 정의
- 기본 틀은 다음과 같이 유지.
- 프로세스 (Process) : 메모리를 비롯한 각종 리소스를 담고 있는 정적인 개념.
- 스레드 (Thead) : 실제 CPU 시간을 할당받아 수행되는 실행단위. 동적인 개념. 프로그램 실행시 생성됨.
* 프로그램은 프로세스로 생성되는데, 멀티스레드로 구현한다고해서 프로세스를 여러개 생성해서 만드는것이 아님. 프로세스는 프로그램 한개당 하나 뿐!! (정적인개념이라고 설명한 이유)
스레드를 다중으로 만들어서 여러 작업을 처리하도록 구현 함. (동적인 개념.)
- 주 스레드(Main Thread) : Winmain() / main() 함수에서 시작되는 스레드.
* 회사에서 사장과 사원들이 있고, 사장이 없으면 회사가 망하는것처럼, 주 스레드 아래 하위 스레드들이 작업중에 주 스레드가 멈춰버리면 하위 스레드가 작업중이더라도 모든 작업이 끝나게 됨.
- 컨텍스트 전환(Context Switch) : CPU 운영체제의 협동으로 이뤄지는 스레드 실행상태의 저장과 복원 작업.
* CPU 시간을 여러개의 스레드가 나눠씀.
1,2,3번 스레드가 순서대로 1초씩 쓴다고하면, 1번 스레드는 2초를 기다려야 다시 쓸수있다.
초라는 단위로보면 엄청 길어보이지만, CPU의 시간단위로 매우 짧게 텀을 잡으면, 사람이 인식하지 못할정도의 속도로 연산처리가 가능함.
전환과정)
1. 1번 스레드가 CPU 사용중
2. 1번 스레드 CPU 할당시간 종료. -> 1번스레드의 정보를 레지스터에 저장.
3. 2번 스레드가 CPU 사용.
4. 2번 스레드 CPU 할당시간 종료. -> 2번스레드의 정보를 레지스터에 저장.
-> 1번 스레드의 레지스터 정보 다시 가져와 CPU 사용.
- 반복 -
ㅇ 스레드 생성에 필요한 필수 요소!
- 스레드 함수의 시작주소(함수이름)
- 스레드 함수 실행시 사용할 스택영역 크기.
ㅇ CreateThread() 함수
- 스레드를 생성한 다음 스레드를 제어할 핸들값을 리턴해 줌.
HANDLE CreateThread LPSECURITY_ATTRIBUTES lpThreadAttributes, // NULL SIZE_T dwStackSize, // 0( 스택 사이즈 :: 0 == Default ) LPTHREAD_START_ROUTINE lpStartAddress, // 스레드 함수 LPVOID lpParameter, // 스레드 함수 인자 DWORD dwCreationFlags, // 0 또는 CREATE_SUSPENDED ::스레드 생성직후 작업을 시작하지 않음. LPDWORD lpThreadId // 스레드 ID :: O.S 가 할당해주는 아이디. ) ; |
ㅇ 스레드함수 정의
- 기본 틀은 다음과 같이 유지.
DWORD WINAPI ThreadProc (LPVOID lpParameter) { ... (내부 코드는 자율) } |
반응형