📜  C#多线程

📅  最后修改于: 2021-05-29 14:28:47             🧑  作者: Mango

多任务处理是在一定时间间隔内同时执行多个任务或进程。 Windows操作系统是多任务处理的一个示例,因为它能够同时运行多个进程,例如同时运行Google Chrome,记事本,VLC播放器等。操作系统使用称为过程的术语来同时执行所有这些应用程序。进程是操作系统的一部分,负责执行应用程序。在系统上执行的每个程序都是一个进程,而要在应用程序内部运行代码的过程中,进程使用一个称为线程的术语。
线程是轻量级进程,换句话说,线程是在程序下执行代码的单元。因此,每个程序都有逻辑,并且线程负责执行此逻辑。默认情况下,每个程序都带有一个线程来执行程序的逻辑,并且该线程称为“主线程” ,因此默认情况下,每个程序或应用程序都是单线程模型。这种单线程模型有一个缺点。单线程以同步方式运行程序中存在的所有进程,意味着一个接一个。因此,第二个进程要等到第一个进程完成执行后,才能在处理中花费更多时间。

例如,我们有一个名为Geek的类,该类包含两个不同的方法,即method1method2 。现在,主线程负责执行所有这些方法,因此主线程一个接一个地执行所有这些方法。

例子:

// C# program to illustrate the 
// concept of single threaded model
using System;
using System.Threading;
  
public class Geek {
  
    // static method one
    public static void method1()
    {
  
        // It prints numbers from 0 to 10
        for (int I = 0; I <= 10; I++) {
  
            Console.WriteLine("Method1 is : {0}", I);
  
            // When the value of I is equal to 
            // 5 then this method sleeps for 
            // 6 seconds and after 6 seconds 
            // it resumes its working
            if (I == 5) {
                Thread.Sleep(6000);
            }
        }
    }
  
    // static method two
    public static void method2()
    {
  
        // It prints numbers from 0 to 10
        for (int J = 0; J <= 10; J++) {
  
            Console.WriteLine("Method2 is : {0}", J);
        }
    }
}
  
// Driver Class
public class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // Calling static methods
        Geek.method1();
        Geek.method2();
    }
}

输出:

Method1 is : 0
Method1 is : 1
Method1 is : 2
Method1 is : 3
Method1 is : 4
Method1 is : 5
Method1 is : 6
Method1 is : 7
Method1 is : 8
Method1 is : 9
Method1 is : 10
Method2 is : 0
Method2 is : 1
Method2 is : 2
Method2 is : 3
Method2 is : 4
Method2 is : 5
Method2 is : 6
Method2 is : 7
Method2 is : 8
Method2 is : 9
Method2 is : 10

说明:在这里,首先执行method1。method1中当i的值等于5时,for循环从0开始,然后该方法进入睡眠状态6秒钟,并在6秒钟后恢复过程并打印剩余值。直到method2处于等待状态。当method1完成分配的任务后, method2开始工作。因此,为了克服单线程模型的缺点,引入了multithreading

多线程是一个在单个进程中包含多个线程的进程。在这里,每个线程执行不同的活动。例如,我们有一个类,此调用包含两个不同的方法,现在使用多线程,每个方法由一个单独的线程执行。因此,多线程的主要优点是它可以同时工作,这意味着多个任务可以同时执行。而且,由于多线程在分时概念上工作,因此还可以最大程度地提高CPU的利用率,这意味着每个线程都有自己的执行时间,并且不影响另一个线程的执行,该时间间隔由操作系统确定。

例子:

// C# program to illustrate the
// concept of multithreading
using System;
using System.Threading;
  
public class GFG {
  
    // static method one
    public static void method1()
    {
  
        // It prints numbers from 0 to 10
        for (int I = 0; I <= 10; I++) {
            Console.WriteLine("Method1 is : {0}", I);
  
            // When the value of I is equal to 5 then
            // this method sleeps for 6 seconds
            if (I == 5) {
                Thread.Sleep(6000);
            }
        }
    }
  
    // static method two
    public static void method2()
    {
        // It prints numbers from 0 to 10
        for (int J = 0; J <= 10; J++) {
            Console.WriteLine("Method2 is : {0}", J);
        }
    }
  
    // Main Method
    static public void Main()
    {
  
        // Creating and initializing threads
        Thread thr1 = new Thread(method1);
        Thread thr2 = new Thread(method2);
        thr1.Start();
        thr2.Start();
    }
}

输出 :

Method1 is : 0
Method1 is : 1
Method1 is : 2
Method1 is : 3
Method2 is : 0
Method2 is : 1
Method2 is : 2
Method2 is : 3
Method2 is : 4
Method2 is : 5
Method2 is : 6
Method2 is : 7
Method2 is : 8
Method2 is : 9
Method2 is : 10
Method1 is : 4
Method1 is : 5
Method1 is : 6
Method1 is : 7
Method1 is : 8
Method1 is : 9
Method1 is : 10

说明:在这里,我们使用Thread类创建并初始化两个线程,即thr1thr2。现在使用thr1.Start();thr2.Start();我们开始执行两个线程。现在,两个线程同时运行,并且thr2的处理不再像单线程模型中那样依赖thr1的处理。

注意:输出可能因上下文切换而有所不同。

多线程的优点:

  • 它同时执行多个过程。
  • 最大限度地利用CPU资源。
  • 多个进程之间的时间共享。