2009-10-06 4 views
20

나는작업자 스레드 란 무엇이며 작성한 스레드와 다른 점은 무엇입니까?

Thread newThread= new Thread(DoSomeWork); 

. 
. 
. 
private void DoSomeWork() 
{ 
} 

이것은 작업자 스레드에서 어떤 다른인가하여 스레드를 생성? 그게 ..면 더 좋고 언제 작업자 스레드를 사용해야합니까? 내 응용 프로그램은 모니터링, 새로 고침을 수행하는 많은 스레드가 필요합니다.

+1

응용 프로그램에 많은 스레드가 필요합니까? 당신이이 질문을하고 있다는 사실은 스레드를 최소화하려고 노력해야한다는 것을 암시합니다 ... –

+0

어떻게해야합니까 : 나의 요구 사항 1) 소켓을 읽고 파일에 쓰고 DB에 값을 입력하십시오. 2) DB를 업데이트하고 새로 고친 값 (또는 새로 삽입 한 값)을 UI 화면에 계속 표시하면 –

+0

Tj로 태그에 플랫폼 (C#, Java)을 표시하면 도움이 될 수 있습니다. –

답변

20

일반적으로 작업 스레드라는 용어는 현재 스레드에서 작업중인 스레드를 설명하는 데 사용됩니다. 전경 또는 UI 스레드. 그러나 이것은 돌로 던져지지 않습니다.

Windows 프로그램은 일반적으로 UI를 관리하는 하나의 스레드를 사용하고이 (즉, 일을 하나씩 실행) 일반적으로 동기입니다. 이러한 종류의 프로그램에서 UI 블록을 작성하지 않으려면 수행 시간이 오래 걸리면 작업 스레드 (기본 스레드와 비동기 적으로 작업)를 수행하는 작업자 스레드 (포 그라운드 스레드 또는 백그라운드 스레드 일 수 있음)를 사용하십시오. , 결과를 기본 스레드에 다시 표시하여 소비합니다.

Windows 프로그램에서 이것은 메시지를 통해 수행됩니다. .net 프레임 워크와 같은 특정 라이브러리를 사용하는 경우 ThreadPool 및 BackgroundWorker와 같은 특수 유틸리티 클래스를 사용하여 백그라운드 또는 작업 스레드 처리를 쉽게 할 수 있습니다. 그러나 언제나처럼 플랫폼 프리미티브를 사용하여 동일한 목적을 달성 할 수 있습니다.

+0

'Windows 프로그램에서 이것은 메시지를 통해 이루어집니다.' 좀 빠지는. Windows 프로그램이 주 스레드에서 오랜 시간 작업을 수행하면 루프에서 특정 함수 (예 : WaitForSingleObject() 및 PeekMessage())를 호출하여 해당 작업을 수행하지 않는 한 해당 작업 기간 동안 메시지를 차단합니다 . (원한다면 [이 답변보기] (http://stackoverflow.com/questions/831265/i-need-a-message-pump-that-doesnt-mess-up-my-open-window/835781#835781) 이 기법을 사용하려면.) 긴 프로세스를 수행하기 위해 스레드를 생성하면 해당 루프를 수행하지 않아도됩니다. – RobH

+0

오해. 마지막 단락은 기본 ** UI ** (가장 낮은 수준에서 Windows 메시지를 펌핑 함) 스레드가 보조 또는 실제로 자체에서 정보를 얻는 방법에 관한 것입니다. 기본 스레드에서 멀티 태스킹을 수행하는 방법이 아닙니다. 2 차 스레드의 존재 이유는 UI 스레드를 차단하지 않기 위해 2 단락과 같습니다. –

7

단순한 용어 이외에 많은 기술적 차이점을 생각할 수 없습니다.

작업자 스레드는 일부 작업을 기다리고 있기 때문에 호출되며 다른 사람이 작업을 할당 할 때 작업을 수행합니다. 예를 들어, 웹 서버 프로세스는 요청을 받아 처리를 위해 해당 풀에서 스레드에 할당합니다. 그 스레드는 프로세스를 따르고 작업을 마치고 다시 풀로 돌아갑니다. 그때까지 주 스레드는 다른 일을 할 것입니다.

목적 : 업데이트 된/새로운 값을 식별하려면 DB를 지속적으로 모니터링해야합니다. 그것은 단지 백그라운드에서 항상 실행중인 스레드 일 수 있으며 주기적으로 깨어나 UI에서 값을 DB에서 업데이트합니다.

10

간단한 개념으로 개념을 설명하려고합니다. 작업자 스레드 개념을 더 잘 이해하는 데 도움이되기를 바랍니다.

일반 정의 : -

A "작업자 스레드는"상사 및 업데이트 작업 결과 (우리는 "클라이언트"를 호출 할 수 있습니다) 그의 상사의 명령에 몇 가지 배경 작업을 수행하기 위해 실행 단지 스레드입니다.

기술 정의 : -

작업자 스레드는 일반적으로 고객의 요청에 활성화됩니다 스레드로 정의된다.

예 1 : 맛있는 피자를 준비 전문가 10 남자가

1 우리는 피자 가게를 가지고. 이를 "작업자 스레드"라고합니다.

2 우리는 고객으로부터 주문을받는 사람이 있습니다. 그 사람은 "클라이언트"라고합니다. 새 주문이 올 때마다 "작업자 스레드"중 하나가 피자를 준비하고 클라이언트에 업데이트하면 피자가 준비됩니다.

3- 주문이 10 개 미만인 경우 일부 직원이 이상적으로 앉아 있습니다.

4- 주문이 10 개를 초과하는 경우 주문은 대기열에 보관됩니다.

예 2 :

1- 포트에 대기하는 응용 프로그램 서버가는 8080

2 요청은 8080

3 리스너 스레드 (이 호출은 포트에서 온다 "클라이언트")는 해당 요청을 가져 와서 요청을 완료하는 "작업자 스레드"로 보냅니다. 실제로 "작업자 스레드"의 풀 ("작업자 스레드"프로그램의 많은 개체)이 응용 프로그램 서버에 유지됩니다.

4- 두 개의 요청이 동시에 들어 오면 두 개의 작업자 스레드가 할당되고 작업이 동시에 실행됩니다.

관련 문제