1. 멀티스레딩의 개념
Windows는 Windows 2000 이상을 사용하는 경우, 현재 시스템에서 실행 중인 프로그램을 볼 수 있습니다. 작업 관리자. 프로세스란 무엇입니까? 프로그램이 실행되기 시작하면 프로세스는 실행 중인 프로그램과 프로그램에서 사용하는 메모리 및 시스템 리소스를 나타냅니다. 프로세스는 여러 스레드로 구성됩니다. 스레드는 프로그램의 실행 흐름입니다. 각 스레드에는 자체 전용 레지스터(스택 포인터, 프로그램 카운터 등)가 있지만 코드 영역은 공유됩니다. 즉, 서로 다른 스레드가 실행될 수 있습니다. 동일한 기능. 멀티스레딩은 프로그램에 여러 실행 스트림이 포함되어 있음을 의미합니다. 즉, 여러 개의 서로 다른 스레드가 하나의 프로그램에서 동시에 실행되어 서로 다른 작업을 수행할 수 있으며, 이는 단일 프로그램이 여러 병렬 실행 스레드를 생성하여 해당 작업을 완료할 수 있음을 의미합니다. 멀티스레딩의 좋은 예는 Java 애플릿이나 이미지를 다운로드하는 동안 페이지를 스크롤하고, 새 페이지에 액세스할 때 애니메이션과 사운드를 재생하고, 파일을 인쇄하는 등의 작업을 수행할 수 있는 브라우저입니다.
멀티 스레딩의 장점은 CPU 활용도를 향상시킬 수 있다는 것입니다. 멀티 스레딩 프로그램에서 스레드가 기다려야 할 때 자신의 프로그램이 대부분의 시간 동안 아무것도 하지 않기를 원하는 프로그래머는 없습니다. CPU는 기다리는 대신 다른 스레드를 실행할 수 있으므로 프로그램 효율성이 크게 향상됩니다.
그러나 스레드를 올바르게 사용하려면 시스템 성능에 영향을 미칠 수 있는 스레드 자체의 부정적인 측면도 인식해야 합니다.
스레드도 프로그램이므로 스레드는 메모리를 점유해야 합니다. 스레드가 메모리를 많이 차지할수록
여러 스레드는 조정과 관리가 필요하므로 스레드를 추적하는 데 CPU 시간이 필요합니다.
스레드 간 공유 리소스에 대한 액세스는 서로 영향을 미치며, 공유 리소스를 놓고 경쟁하는 문제는 해결되어야 합니다. .
스레드가 너무 많으면 제어가 너무 복잡해 결국 많은 버그가 발생할 수 있습니다
위의 이해를 바탕으로 비유를 사용하여 이해를 심화할 수 있습니다. 자신의 직무를 수행하는 직원이 많은 회사가 있다고 가정해 보겠습니다. 그러면 정상적으로 운영되는 이 회사를 프로세스로 생각하고 회사의 직원을 스레드로 생각할 수 있습니다. 회사에는 최소한 한 명의 직원이 있어야 합니다. 마찬가지로 프로세스에는 최소한 하나의 스레드가 있어야 합니다. 회사에서는 한 명의 직원이 모든 일을 하게 할 수 있지만 효율성은 당연히 높지 않으며, 1인 회사에서는 성장이 불가능합니다. 프로그램도 하나의 스레드만 사용하여 작업을 수행할 수 있습니다. 포춘이나 베이직 같은 언어의 경우도 마찬가지지만 1인 기업답게 효율성이 매우 낮습니다. 큰 프로그램을 만들면 효율성은 더욱 떨어지죠. 사실 싱글 쓰레드는 거의 없습니다. 이제 상용 소프트웨어. 회사에 직원이 많을수록 상사는 직원에게 더 많은 급여를 지급해야 하며 직원을 관리하고 직원 간의 갈등과 이해관계를 조정하는 데 많은 에너지를 소비해야 합니다. 프로그램의 경우에도 마찬가지입니다. , 더 많은 리소스가 소모되므로 스레드를 추적하는 데 CPU 시간이 필요하며 교착 상태 및 동기화와 같은 문제를 해결해야 합니다. 간단히 말해서, 회사가 "가죽 가방 회사"로 불리는 것을 원하지 않으면 직원이 몇 명 더 있어야 합니다. 프로그램이 유치해 보이지 않게 하려면 프로그램에 멀티스레딩을 도입하십시오!
이 기사에서는 C# 프로그래밍의 멀티스레딩 메커니즘에 대해 논의하고 몇 가지 예제를 통해 스레드 제어 및 멀티스레드 통신과 같은 문제를 해결합니다. GUI를 작성하는 지루한 단계를 줄이고 스레드의 특성에 보다 명확하게 접근하기 위해 다음 프로그램은 모두 콘솔 프로그램입니다. 프로그램 마지막에 있는 Console.ReadLine()은 프로그램을 중간에 중지하는 것입니다. 실행 프로세스를 명확하게 확인하세요.
자, 말도 안되는 소리는 그만하고 멀티스레드 C#을 경험해 봅시다!
2. 스레드 조작
프로그램이 실행되면 최소한 하나의 메인 스레드가 있습니다. 다음과 같은 작은 프로그램은 독자에게 직관적인 인상을 줄 수 있습니다. [CODE]
//SystemThread.csusing System;
using System.Threading;
네임스페이스 ThreadTest
static void Main(string[] args )
{
Thread.CurrentThread.Name="시스템 스레드";//현재 스레드 이름을 "시스템 스레드"로 지정
Console.WriteLine (Thread.CurrentThread.Name+"'Status:"+Thread.CurrentThread .ThreadState);
Console.ReadLine();
컴파일하고 실행한 후 무엇이 표시되나요? 예, 프로그램은 다음과 같은 출력을 생성합니다.
System Thread's Status: Running
여기서 Thread 클래스의 정적 속성 CurrentThread를 통해 현재 실행 중인 스레드를 얻습니다. Name 속성에는 "System Thread"라는 값이 할당되고 최종적으로 현재 상태(ThreadState)가 출력됩니다. 소위 정적 속성은 이 클래스의 모든 개체에 공통된 속성입니다. 이 클래스의 인스턴스 수에 관계없이 메모리에는 클래스의 정적 속성이 하나만 있습니다. CurrentThread가 정적인 이유를 이해하는 것은 쉽습니다. 여러 스레드가 동시에 존재하더라도 CPU는 특정 순간에 그 중 하나만 실행할 수 있습니다.
위 프로그램에서 보듯이 Thread 클래스를 통해 스레드를 생성하고 제어합니다. 프로그램 헤더에서 다음 네임스페이스를 사용합니다.
[CODE]
using System;
using System.Threading;
[/CODE]
.net 프레임워크 클래스 라이브러리에서 멀티스레딩 메커니즘 애플리케이션과 관련된 모든 클래스는 System.Threading 네임스페이스에 배치됩니다. 스레드 생성을 위한 Thread 클래스, 스레드 풀 관리를 위한 ThreadPool 클래스 등을 제공합니다. 또한 스레드 실행 배열, 교착 상태, 스레드 간 통신 등의 실제 문제를 해결하기 위한 메커니즘도 제공합니다. 애플리케이션에서 멀티스레딩을 사용하려면 이 클래스를 포함해야 합니다. Thread 클래스에는 다음과 같이 설명되는 몇 가지 중요한 메서드가 있습니다.
Start(): 스레드 시작
Sleep(int): 정적 메서드, 지정된 밀리초 동안 현재 스레드를 일시 중지합니다.
Abort() : 이 메서드는 일반적으로 스레드를 종료하는 데 사용됩니다.
Suspend(): 이 메서드는 완료되지 않은 스레드를 종료하지 않고 스레드만 일시 중지하고 나중에 다시 시작할 수 있습니다.
Resume(): Suspend() 메서드에 의해 일시 중단된 스레드의 실행을 재개합니다.
위는 C#의 멀티스레딩 메커니즘에 대한 예비 탐색 내용입니다(1). PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!