일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- rank
- Visual Studio
- Delphi
- get_object_or_404
- MSSQL
- queryset
- advColumnGrid
- HTML
- hackerrank
- declare
- python 3.7
- GIT
- github
- COMMIT
- dbadvgrid
- c#
- 델파이
- python3
- blog
- 중복제거
- pythonanywhere
- anaconda3
- TMS
- Push
- 백준
- PyCharm
- delphi 10.3
- pyhcarm
- Django
- templates
- Today
- Total
DevHyun
Delphi 에서의 thread 정리글 본문
[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)가 필요하다.
'Delphi' 카테고리의 다른 글
Window Handle값 및 sendmessage (0) | 2021.06.03 |
---|---|
[TMS DBAdvGrid] 그리드 내에서 검색하기 (0) | 2021.06.03 |
[TMS AdvColumnGrid] 그리드 내에서 검색하기 (0) | 2021.06.03 |
[TMS AdvColumnGrid] header 클릭 시 금액순으로 정렬하기 (0) | 2021.04.27 |
Delphi에서 FastReport 핸들링 하기! (0) | 2021.01.21 |