스레드 소개

루틴: 이동 파일, 데이터베이스와 네트워크 접근 등 모든 대기 작업에 일정한 시간이 필요합니다. 이 때 새로운 루틴을 시작하여 다른 작업을 완성할 수 있습니다.하나의 프로세스의 여러 라인은 서로 다른 CPU나 다핵 CPU의 서로 다른 핵에서 동시에 운행할 수 있다.루틴은 프로그램의 독립된 명령 흐름이다.VS 편집기에서 코드를 입력할 때 시스템은 코드를 분석하고 밑줄로 누락된 번호와 다른 문법 오류를 표시한다. 이것이 바로 백엔드 라인으로 완성된다.Word 문서는 한 라인이 사용자의 입력을 기다리고 다른 라인이 백엔드 검색을 하며 세 번째 라인은 쓴 데이터를 임시 파일에 저장합니다.서버에서 실행되는 프로그램에서 고객의 요청을 기다리는 라인이 탐지기 라인이 됩니다.프로세스는 윈도 핸들, 파일 시스템 핸들, 또는 다른 핵 대상을 포함합니다.각 프로세스에 할당된 가상 메모리입니다.하나의 프로세스는 최소한 하나의 라인을 포함한다.프로그램이 시작되면 보통 프로세스를 시작하고, 프로세스가 여러 라인을 시작합니다.
루틴의 우선순위: 루틴은 운영체제 스케줄링이 있고 한 CPU가 같은 시간에 한 가지 일만 할 수 있다(한 루틴을 실행하는 계산 작업). 많은 루틴이 CPU를 실행해야 할 때 루틴 스케줄러는 루틴의 우선순위에 따라 어떤 루틴을 먼저 실행할지 판단하고 우선순위가 같으면 순환 스케줄링 규칙을 사용하여 각 루틴을 하나씩 실행한다.Thead 클래스에서 Priority 속성을 설정하여 라인의 기본 우선순위에 영향을 줄 수 있다.Priority 속성은 ThreadPriority 매거진이 정의한 값이다.정의된 레벨은 Highest, AboveNormal, BelowNormal, Lowest입니다.
루틴과 프로세스의 해석(자료원천-완일봉)1, 컴퓨터의 핵심은 CPU로 모든 계산 임무를 맡는다.그것은 마치 공장처럼 시시각각 운행하고 있다.2. 공장의 전력이 제한되어 있으면 한 번에 한 작업장에서만 사용할 수 있다.즉, 한 작업장이 착공할 때 다른 작업장은 반드시 휴업해야 한다는 것이다.배후의 의미는 바로단일 CPU는 한 번에 하나의 작업만 실행할 수 있습니다.(멀티 코어 CPU는 여러 작업을 실행할 수 있음)3, 프로세스는 공장 작업장과 같이 CPU가 처리할 수 있는 단일 작업을 나타냅니다.CPU는 항상 한 프로세스를 실행하고 다른 프로세스는 비실행 상태입니다.4, 한 작업장에 많은 노동자들이 협동하여 하나의 임무를 완성할 수 있다.5, 라인은 작업장의 노동자와 같다.하나의 프로세스는 여러 개의 라인을 포함할 수 있다.6, 작업장의 컨트롤러는 노동자들이 공유하는 것이다. 예를 들어 많은 방은 모든 노동자들이 출입할 수 있다.이것은 프로세스의 메모리 공간이 공유되고 모든 라인이 이 공유 공간을 사용할 수 있음을 상징한다.7, 프로세스는 CPU가 처리할 수 있는 단일 작업을 나타내는 플랜트 작업장과 같습니다.CPU는 항상 한 프로세스를 실행하고 다른 프로세스는 비실행 상태입니다.8, 다른 사람이 들어오는 것을 방지하는 간단한 방법은 바로 입구에 자물쇠(화장실)를 넣는 것이다.먼저 도착한 사람은 문을 잠그고, 뒤에 도착한 사람은 자물쇠가 잠긴 것을 보고 입구에서 줄을 서서 자물쇠가 열리면 들어간다.이를 상호 배타적 잠금(Mutual exclusion, 줄여서 Mutex)이라고 하는데, 여러 스레드가 한 메모리 영역을 동시에 읽고 쓰는 것을 방지합니다.9, 그리고 일부 방은 n 사람을 동시에 수용할 수 있다. 예를 들어 주방.n보다 많은 사람이 나오면 밖에서 기다릴 수밖에 없다는 얘기다.이것은 일부 메모리 영역과 같이 고정된 수량의 라인만 사용할 수 있다.10, 이때의 해결 방법은 바로 입구에 n개의 열쇠를 거는 것이다.들어간 사람은 열쇠를 하나 꺼내서 나올 때 다시 열쇠를 제자리에 걸어라.뒤에 도착한 사람은 열쇠가 비어 있는 것을 발견하고 반드시 입구에서 줄을 서서 기다려야 한다는 것을 알았다.이런 방법을'신호량'(Semaphore)이라고 하는데, 여러 라인이 서로 충돌하지 않도록 하는 데 쓰인다.무텍스는 Semaphore의 특수한 상황(n=1시)이라는 것을 알 수 있다.전자를 후자로 대체할 수 있다는 얘기다.그러나mutex는 비교적 간단하고 효율이 높기 때문에 자원 독점을 확보해야 하는 상황에서 이런 디자인을 사용한다.11. 운영체제의 디자인은 세 가지로 요약할 수 있다. (1) 다중 프로세스 형식으로 여러 개의 임무를 동시에 운행할 수 있다.(2) 다중 스레드 형식으로 단일 임무를 서로 다른 부분으로 나누어 운행할 수 있도록 허용한다.(3) 조율 메커니즘을 제공하여 한편으로는 프로세스 간과 라인 간의 충돌을 방지하고 다른 한편으로는 프로세스 간과 라인 간의 자원을 공유하는 것을 허용한다.
스레드 1을 제어하여 스레드의 상태를 얻을 수 있습니다(런닝인지 Unstarted인지,,,,,,). Thread 대상의 Start 방법을 호출하면 스레드를 만들 수 있습니다. 그러나 Start 방법을 호출한 후에 새로운 스레드는 바로 런닝 상태에 들어가는 것이 아니라 Unstarted 상태에서 나온 것입니다. 운영체제의 스레드 스케줄러가 실행할 스레드를 선택해야만 이 스레드의 상태는 런닝 상태로 수정됩니다.우리는 Thread를 사용합니다.Sleep () 방법은 현재 스레드를 WaitSleepJoin 상태로 휴면시킬 수 있습니다.2, Thread 객체의 Abort() 방법을 사용하여 스레드를 중지할 수 있습니다.이 방법을 사용하면 종료할 라인에서 Thread Abort Exception 형식의 이상을 던집니다. 우리는try catch의 이상을 던진 다음 라인이 끝나기 전에 청소를 할 수 있습니다.3, 라인이 끝날 때까지 기다릴 필요가 있으면 Thread 대상의 Join 방법을 호출하여 Thread를 추가하고 현재 라인을 멈추고 WaitSleepJoin 상태로 설정하여 라인이 완성될 때까지 설정할 수 있습니다.
루틴 탱크 (기본값은 백엔드 루틴) 에서 루틴을 만드는 데 시간이 걸립니다.만약 서로 다른 작은 임무를 완성해야 한다면, 사전에 많은 라인을 만들어서, 이 임무를 완성해야 할 때 요청을 할 수 있다.이 스레드 수는 더 많은 스레드가 필요할 때 증가하고 자원을 방출해야 할 때 줄이는 것이 가장 좋다.스레드 풀을 직접 만들 필요가 없습니다. 시스템에 ThreadPool 클래스 관리 스레드가 이미 있습니다.이 종류는 최대 스레드에 도달할 때까지 필요할 때 연못의 스레드 수를 증감한다.연못의 최대 스레드 수는 설정할 수 있습니다.듀얼 코어 CPU에서 기본값은 1023개의 워크스레드와 1000개의 I/o 스레드입니다.스레드 탱크를 만들 때 즉시 시작해야 할 최소 스레드 수와 스레드 탱크에서 사용할 수 있는 최대 스레드 수를 지정할 수도 있습니다.만약 더 많은 작업을 처리해야 한다면, 스레드 탱크의 스레드 개수도 극한에 이르렀고, 최신 작업은 줄을 서야 하며, 스레드가 임무를 완성하기를 기다려야 한다.
namespace        
{
    class Program
    {
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);
            ThreadPool.QueueUserWorkItem(SmallThread);

            Console.Read();
        }
        static void SmallThread(object filename)
        {
            Console.WriteLine("    ,ID:"+Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(1000);
            Console.WriteLine("    ");
        }
    }
}

스레드 탱크를 사용할 때 주의해야 할 사항: 스레드 탱크의 모든 스레드는 백엔드 스레드이다.만약 프로세스의 모든 프론트 데스크톱 라인이 끝난다면, 모든 프론트 데스크톱 라인은 멈출 것이다.연못에 들어가는 라인을 프론트 데스크 라인으로 바꿀 수 없다.연못에 들어가는 라인에 우선순위나 이름을 설정할 수 없습니다.연못에 들어가는 라인은 시간이 비교적 짧은 작업에만 사용할 수 있습니다.Word의 맞춤법 검사 스레드와 같은 스레드를 계속 실행하려면 Thread 클래스를 사용하여 스레드를 만들어야 합니다.

좋은 웹페이지 즐겨찾기