프로세스, 스레드, 다중 스레드의 초보 학습

//프로세스는 하나의 프로그램이 실행되기 시작할 때 그녀가 하나의 프로세스이다//프로세스는 하나의 프로그램이 실행 중인 실행 흐름이다. 예를 들어 플레이어가 실행될 때 가사를 볼 수 있다. 바로 하나의 라인이다//다중 라인 천둥 속의 다운로드는 하나의 예이다. 다운로드는 단일 라인과 동시에 여러 라인을 다운로드하면 다중 라인이 cpu의 이용률을 높인다//다중 라인도 불리한 라인도 있고 프로그램이 메모리를 차지해야 한다.다중 루틴은 조율과 관리가 필요하기 때문에 cpu 시간 추적 루틴//루틴 간에 공유 자원에 대한 접근이 서로 영향을 미치므로 공유 자원 경용 문제를 해결해야 한다.스레드가 너무 많으면 제어가 너무 복잡해져서 결국에는 많은 버그를 일으킬 수 있다.//Thread 클래스로 루트를 만들 때, 루트 입구만 제공합니다. (루트 입구는 프로그램이 이 루트를 무엇을 해야 하는지 알 수 있도록 합니다.)//루트를 만드는 문법://2: Thread new Thread = new Thread (방법)주의: 방법은 정적일 수도 있고 비정적일 수도 있다//방법은 본류일 수도 있고 비본류일 수도 있다//생각할 수도 있다: 만약에 라인의 입구 방법에 파라미터가 있으면 어떡하지?//그러면 매개 변수는 Object 유형//스레드의 매개 변수가 맞습니다. 대상이나 클래스에서 static void Main(string [] args) {//매개 변수 유형이 없는 Thread t = new Thread t= new Thread(Run Download), t.Start(),//매개 변수 유형이 있는 Thread t1 = new Thread(Run), List = new List {1, 2, 3, 4, 5}t1.Start(list); } static void RunDownload() {Console.WriteLine(다운로드 시작);static void Run(object obj) {
 List s = obj as List;
        foreach (var item in s)
        {
            Console.WriteLine(item);
        }

    }

//다중 스레드 사용static void Main(string[] args) {Thread t1 = new Thread(RunDownload), Thread t2 = new ThreadFile), t1.Start(), t2.Start(),//현재 실행 상태Console.Write Line(t1.Thread State) 가져오기;Console.WriteLine(t2.ThreadState); } static void RunDownload() {int i = 0; while(true) {Thread.Sleep(50);/Console.WriteLine(다운로드), Console.Write(i++'\t);}static void ReadFile() { while (true) { Thread.Sleep(500); Console.WriteLine(); } } //여러 스레드가 한 방법을 동시에 운행할 때 우리는 하나의 lock(this)//상호 배척 잠금이나 모니터로 잠금 현상을 해결할 때 static void Main(string[] args) {Students = new Student(), Thread t1 = new Thread(s.Run), Thread t2 = new Thread t2 = new Thread t2(s.Run), Thread t3 = new Thread Thread t3 = Runs. t1.t1.Name ='자동차 1','t1. Name t1 = 't1 ='자동차 1','t2 ='t2 =' t2, 자동차 t1, t1 = 't2, t1 =' t1 = 't1, t2, t2.Start(), t3.Start(); } class Student {public void Run() {//잠금 해제 방식 1 lock(this)//상호 배척 잠금을 해결하고 스레드 동기화 문제를 해결하며 여러 스레드가 같은 방법으로 작동할 때 잠금 {Console.WriteLine(Thread.CurreentThread.Name+"터널 통과); Thread.Sleep(2000)}////잠금 해제 방법 2//Monitor.Enter(this); //Console.WriteLine(Thread.CurrentThread.Name+터널 통과);//Thread.Sleep(2000); //Monitor.Exit(this); } } } //정적 방법이라면
static Object obj = new object(); static void Student() {lock(obj) {Console.WriteLine(Thread.Current Thread.Name+"터널 통과"), Thread.Sleep(2000),}}

좋은 웹페이지 즐겨찾기