<0>시작(Delphi 동시 프로그래밍)
일련의 글에서 델피의 병렬 프로그램 설계를 처리합니다.
일본어
영어.
의 목적
병렬 계산
Concurrent Computing
응답성 향상
병렬 계산
Parallel Computing
처리량의 증가
並行計算
와 並列計算
는 비슷한 개념이지만 뜻은 좀 다르다.See also:
병행 처리를 하려면 몇 가지 방법이 있다.
0.1.1. 프로세스 및 스레드
과정은 쉽게 말하면 실행 중인 프로그램이다.프로그램의 실례라고 할 수 있다.
루틴은 프로그램에서 처리하는 기본 단위다.프로세스 중에는 반드시 하나의 라인이 있는데, 이를 주 라인 (주 라인) 이라고 부른다.병렬 처리를 위해 추가된 라인을 백엔드 라인이라고 부른다.
주 스레드가 아닌 스레드를worker 스레드라고 하는데 혼란을 피하기 위해 본 보도는 다음과 같은 뜻을 사용했습니다.
실마리
부르다
어플리케이션 마스터 스레드
주 스레드
생성된 하위 스레드
배경 단서
백그라운드 단서, 단서 탱크에서 관리하는 단서
작업 단서
현재 실행 중인 스레드
현재 단서
이전 Windows(Microsoft)의 멀티스레드 문서에서
실마리
부르다
어플리케이션 마스터 스레드(마스터 스레드)
주요 단서
GUI 작업 스레드(배경 스레드)
GUI 스레드
GUI를 사용하지 않는 스레드(백그라운드 스레드)
작업 단서
나는 이렇게 사용한다고 생각하지만, 현재 마이크로소프트 문서
ワーカースレッド
에서는 이 호칭이 스레드 탱크 (후술) 에만 사용되거나, Windows API 문서에서만 사용된다....이처럼 OS, 언어, 프레임워크, 프로그램 라이브러리에 따라 가리키는 내용도 다를 수 있으니 주의하세요.
0.1.2. 타이머 병렬 처리
TTimer
를 사용하면 의심되는 병행 처리가 가능합니다.See also:
다른 프로그램(상주 프로그램 등)을 만들어 프로세스 간 통신을 하면 여러 프로세스를 통해 병행 처리할 수 있다.모든 프로세스의 루틴은 다른 메모리 공간에서 실행되기 때문에 데이터 공유의 메커니즘을 고려해야 한다.
이전 Delphi
$(DELPHI)\DEMOS\Ipcdemos
에는 프로세스 간 통신을 위한 프레젠테이션 프로그램이 있습니다.모니터를 통해 클라이언트 프로그램의 마우스 조작을 감시합니다.이 밖에 이 샘플에서 동기화 대상
TEvent
/TMutex
도 RTL의 선구자로 실현되었다.0.1.4. 다중 스레드 병렬 처리
다중 스레드를 사용하면 병행 처리할 수 있다.라인은 같은 메모리 공간에서 운행하기 때문에 상대적으로 간단하게 데이터 공유를 할 수 있다.
병렬 처리로서 다중 프로세스가 잘 사용되지 않는 것은 프로세스 간 통신의 원가가 높기 때문이다.원래 다중 루틴은 라이트-weight process(Light-weight process)에서 출발한다.
이 일련의 문장은 주로 다선정을 처리한다.
0.2. Delphi 및 스레드 처리
Delphi가 처음으로 루틴 루틴과 클래스를 실현한 것은 Delphi2이다.Delphi1은 Windows 3.1을 대상으로 하므로 스레드 관리 루틴이나 클래스가 존재하지 않습니다.
0.2.1 BeginThread/EndThread
Delphi는
BeginThread()
와 EndThread()
의 루틴 규칙이 있다.초기 프로그램은 Windows API를 매우 얇게 패키지한 프로그램입니다.Delphi
Windows API
System.BeginThread()
CreateThread()
System.EndThread()
ExitThread()
Delphi2의 정의는 다음과 같습니다.
system.pas
function BeginThread(SecurityAttributes: Pointer; StackSize: Integer; ThreadFunc: TThreadFunc;
Parameter: Pointer; CreationFlags: Integer; var ThreadId: Integer): Integer;
procedure EndThread(ExitCode: Integer);
BeginThread()
와 EndThread()
는 델피의 라인 API를 안전하게 사용하는 데 사용되는 잠금 저장 프로그램으로 직접 처리CreateThread()
/ExitThread()
를 추천하지 않습니다.그러나 스레드 처리를 위해 이 두 프로세스만 사용할 수 없으며 결과적으로 Windows API를 동시에 사용해야 합니다.Delphi
Windows API
CloseHandle()
GetThreadPriority()
ResumeThread()
SetThreadPriority()
System.SysUtils.Sleep()
Sleep()
SuspendThread()
TerminateThread()
WaitForMultipleObjects()
WaitForSingleObject()
최근 델피는 Windows 플랫폼 이외의 곳에서 일할 준비가 되어 있다
BeginThread()
/EndThread()
.system.pas
{$IFDEF POSIX}
function BeginThread(Attribute: PThreadAttr; ThreadFunc: TThreadFunc;
Parameter: Pointer; var ThreadId: TThreadID): Integer;
{$ENDIF}
Windows와 매개변수가 다르므로 BeginThread()
와EndThread()
라도 직접 처리하지 않는 것이 좋습니다.0.2.2 스레드 작업
다음은 단서 조작의 종류를 소개할 것이다.
참고 자료
[ 목록에서 ↑ ] [ → 1. 스레드 객체 ]
Reference
이 문제에 관하여(<0>시작(Delphi 동시 프로그래밍)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ht_deko/items/c6714835355a83cde088텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)