DevHyun

Delphi 에서의 thread 정리글 본문

Delphi

Delphi 에서의 thread 정리글

D3V3L0P3R 2023. 2. 3. 13:33

[Delphi에서의 thread]

1) thread begin ~ end 블록 사이에서 UI 조작(변경, 수정, 삭제등)할때는 Syncronize 이용한다.

2) 다른 thread 동시에 같은 자원(변수, 클래스등) 공유(동시에 읽거나 쓰는 행위, 포인터를 참조하는 행위)하지 않는다.

3) thread 유사한 형식인 델파이 기본 타이머의 경우 윈도우 이벤트 방식으로 구현되므로 정확도가 떨어지고(윈도우컨디션에 따라 100~500ms 이하 작동 불규칙) 메인UI(메인쓰레드)가 멈추지 않고 작업 불가능 하다

 

[Suspend Resume]


-> Thread
 잠시 멈추고 다시 시작함
-> TThread
 Thread 강제종료 기능을 제공하고 있지 않음
-> Suspend
 호출되는 순간 Thread  멈춰버림
-> Suspend
 Resume 짝이 맞아야함 (1:1, 2:2, 3:3...)
-> Suspend
 Sleep보다 유용한 이유는 Sleep CPU 쥐꼬리만큼 시간을 잡아먹는데 비해 Suspend CPU 낭비가전혀 없다는 

 

 

[Process 구조]

 

[thread 구조]

 

 

[Process thread]

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 

쓰레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.

 

[Process와 thread 차이점(Multi)]

- Multi Process : 데이터 영역, (Heap), 스택(stack)영역 모두를 비공유

- Multi thread : 데이터 영역, , 스택영역중 스택영역만 비공유

 

[Multi thread에서 thread간 스택영역만 비공유하고 데이터 영역과 힙영역을 공유한다는것에 대한 장점]

- 컨텍스트 스위칭  데이터 영역과 힙은 올리고 내릴 필요가 없다.

- 데이터 영역과 힙영역을 통해 데이터 교환이 가능하다

- thread 생성  컨텍스트 스위칭은 프로세스의 생성  컨텍스트 스위칭보다 빠르다.

- thread 사이에서의 데이터 교환에서는 특별한 기법이 필요없다.

-  이상의 thread 동시에 실행하면 문제를 일으키는데, 이는 하나의 변수( 메모리 공간)  이상의 thread 동시에 접근하기 때문이다. (정확히는 thread간 실행흐름이 넘어가기 때문이다. , 어떤 변수에 A thread 값을 증가시키고, B thread 값을 증가시키는 ) 이러한 문제를 막기 위해서는 동기화(Synchronization) 필요하다

 

Comments