C#--进程与线程

进程的概念

  1. 进程
    进程是程序在计算机上的一次执行活动。运行一个程序就相当于启动一个进程。Windows系统利用进程把工作划分为多个独立的区域,每个应用程序实例对应一个进程。进程是操作系统分配和使用系统资源的基本单位。进程包含一个正在运行时,应用程序的所有资源。每个进程所占用的资源都是相互独立。
    进程资源包括:
    (1)一个进程堆;
    (2)一个或多个线程;
    (3)一个虚拟地址空间,该空间独立于其他进程的地址空间;
    (4)一个或多个代码段,包括.dll中的代码;
    (5)一个或多个包含全局变量的数据段;
    (6)环境字符串,包含环境变量信息;
    (7)其他资源,例如打开的句柄、其他的堆等。
  2. 多进程
    多进程就是在同一计算机系统中,同一个时刻允许两个或两个以上的进程处于运行状态。多进程有以下特点:
    (1) 进程间互相独立,可靠性高。
    (2) 进程之间不共享数据,没有锁问题、结构简单。
    (3) 需要跨进程边界,多进程调度开销较大。
    在Windows操作系统中,通过访问Windows任务管理器可以查看当前正在运行的进程。单击详细信息,可看到进程的PID、CPU使用率、内存使用率等信息,应用程序可以包含一个或多个进程,每个进程都有自己独立的数据、执行代码和系统资源,如下图所示。
    在这里插入图片描述

线程的概念

  1. 线程
    线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈、指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
    注意:一个进程可以有多个线程、一个线程必须有一个父进程,一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
  2. 多线程
    多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

(1)多线程具有以下优点。
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其他的线程而不是等待,这样就大大提高了程序的效率。
(2)多线程具有以下缺点。
① 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
② 多线程需要协调和管理,所以需要CPU时间跟踪线程;
③ 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
④ 线程太多会导致控制太复杂,最终可能造成很多Bug。
(3) 线程的声明周期
线程的生命周期线程生命周期开始于System.Threading.Thread类的对象被创建时,结束于线程被终止或完成执行时。下面列出了线程生命周期中的各种状态。
(1)未启动状态:当线程实例被创建,但Start方法未被调用时的状况。
(2)就绪状态:当线程准备好运行并等待CPU周期时的状况。
(3)不可运行状态:已经调用Sleep方法、Wait方法或者通过I/O操作阻塞时,线程是不可运行的。
(4)死亡状态:当线程已完成执行或已中止时的状况。
在C#中,Thread类用于线程的工作。它允许创建并访问多线程应用程序中的单个线程。进程中第一个被执行的线程称为主线程。
编写程序,创建一个线程、打印101-201到控制台上。

using System;
using System.Threading;
namespace Project1
{
    class Program
    {
        //创建线程的方法,进101到201输出到屏幕
        public static void Method()
        {
            for (int i = 101; i < 201; i++)
            {
                if (i % 10 == 0)
                {
                    Console.WriteLine(i.ToString()); //换行打印
                }
                else
                {
                    Console.Write(i.ToString()+"  "); //不换行打印
                }
            }
        }
        static void Main(string[] args)
        {
            //创建委托实例
            ThreadStart ts = new ThreadStart(Method);
            //通过委托实例来构造Thread类
            Thread t = new Thread(ts);
            t.Start();
            Console.ReadKey();
        }
    }
}

程序结果:

101  102  103  104  105  106  107  108  109  110
111  112  113  114  115  116  117  118  119  120
121  122  123  124  125  126  127  128  129  130
131  132  133  134  135  136  137  138  139  140
141  142  143  144  145  146  147  148  149  150
151  152  153  154  155  156  157  158  159  160
161  162  163  164  165  166  167  168  169  170
171  172  173  174  175  176  177  178  179  180
181  182  183  184  185  186  187  188  189  190
191  192  193  194  195  196  197  198  199  200

Thread类

在.Net Framework中,所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。如果用户想在应用程序中使用多线程,就必须包含这个类。
下表列出了Thread类的一些常用的属性。
在这里插入图片描述

下表列出了Thread类的一些常用方法。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值