Thread 흐름을 어떻게 컨트롤 하지?

백엔드·2023년 9월 11일

Multi Thread

목록 보기
2/2

들어가며

해당 강의를 보며 정리한 내용입니다.

Entry Point(진입점)란?

  • 진입점(Entry Point)은 프로그램이 실행되면 가장 먼저 실행되는 지점을 가리킵니다.

  • 대부분의 프로그래밍 언어에서 이진 파일(실행 파일)을 실행하면 이진 파일 내부에 있는 특정 함수 또는 메서드가 진입점 역할을 합니다.

  • C#에서는 주로 Main 함수가 진입점으로 사용됩니다. Main 함수는 아래와 같이 정의됩니다.

public static void Main(string [] args) {}

Thread.Start()

  • Thread.Start() 메서드는 새로운 스레드를 생성하고 해당 스레드에서 실행할 함수를 지정합니다.
var thread = new Thread(Func);
thread.start();

Thread.Join()

Thread.Join() 메서드는 스레드가 종료될 때까지 대기(Blocking)합니다. 즉, 다른 스레드에서 실행 중인 스레드의 실행이 완료될 때까지 기다립니다.

var thread = new Thread(Func);
thread.Start();
thread.Join();

Blocking & Non-Blocking

Blocking: 함수를 호출하고 모든 코드가 완료된 후에 리턴되는 방식입니다. 즉, 함수가 실행 중에 다른 작업을 수행할 수 없고 기다려야 합니다.

Non-Blocking: 함수를 호출하고 함수의 코드가 완료되지 않아도 즉시 리턴되는 방식입니다. 함수의 실행이 백그라운드에서 비동기적으로 처리됩니다.

Polling

Polling은 주기적으로 어떤 조건이 만족될 때까지 확인하는 방법입니다. 특정 조건이 충족될 때까지 반복문을 사용하여 주기적으로 확인합니다.

while(true) {
	if (isFinish == true) {
		Break;
	}
	sleep(1000);
}

Event

Event는 어떤 일이 발생했을 때 원하는 동작을 수행하는 방식입니다. 이벤트가 발생하면 미리 등록된 콜백 함수 또는 핸들러 함수가 실행됩니다.

대표적인 예로 JavaScript의 setTimeout 함수가 있습니다. 특정 시간이 경과하면 콜백 함수가 실행됩니다.

setTimeout(callback, 1000);

function callback() {}

async & await

public async function Task<string> GetString() {}
string result = await GetString();
Console.Write(result);

GetString 함수가 비동기로 호출될 때, 이 함수의 실행은 현재 스레드(일반적으로 메인 스레드)와 별도의 스레드에서 동시에 실행됩니다. 이것은 멀티스레딩 환경에서 특히 중요한데, 한 스레드에서 어떤 작업이 블로킹되더라도 다른 스레드에서 다른 작업을 계속할 수 있기 때문입니다.

await 키워드를 사용하여 GetString 함수의 실행이 완료될 때까지 대기합니다. 이는 다른 스레드에서 실행 중인 GetString 함수의 작업이 끝날 때까지 기다리지 않고, 다른 작업을 수행하다가 필요한 결과가 준비되면 다시 메인 스레드로 돌아와서 결과를 사용할 수 있게 해줍니다.

profile
백엔드 개발자

0개의 댓글