8.1 概念
进程(Process):是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。进程之间是相对独立的,一个进程无法直接访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。
要解决的问题:为了使程序能并发执行,(要并发执行就要隔离进程,使进程独立,即每个进程有属于自己的数据段、程序段、进程控制块)
应用程序域:它提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。
优势:在一个应用程序中出现的错误不会影响其他应用程序。能够在不停止整个进程的情况下停止单个应用程序。应用程序域形成了托管代码的隔离、卸载和安全边界。 在任意给定时间,每一线程都在一个应用程序域中执行
线程:是Windows任务调度的最小单位。线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
解决问题:进程是一个资源的拥有者,因而在进程的创建、撤销、和切换的过程中,系统必须为之付出较大的时空开销,限制了并发程度的进一步提高。
8.2 中如何实现多线程
产生一个线程的4步骤:
1. 编写产生线程要执行的方法
2. 引用System.Threading命名空间
3. 实例化Thread类,并传入一个指向线程所要运行方法的委托。( 这时候这个线程已经产生,但是还没有运行 )
4. 调用Thread实例的Start方法,标记该线程可以被CPU执行了( 具体执行时间由CPU决定 )
8.3 前台线程和后台线程
前台线程:只有所有的前台线程都关闭才能完成程序关闭。
后台线程:只要所有的前台线程都结束,后台线程自动结束。
Thread.IsBackground = true;
练习:抽奖
DEMO
DEMO using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms; namespace _01委托
{
public partial class Form1 : Form
{
System.Timers.Timer time = new System.Timers.Timer(50);///实例化Timer类,设置间隔时间为50毫秒 public Form1()
{
InitializeComponent();
Label.CheckForIllegalCrossThreadCalls = false; //取消验证Lable,以防“方法重入”的问题
} private void button1_Click(object sender, EventArgs e)
{ Thread thread = new Thread(OKStart);//调用线程
thread.IsBackground = true; //设置为后台线程
thread.Start();
} public void OKStart()
{
time.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick);
if (time.Enabled == true)
{
button1.Text = "开始";
time.Enabled = false;
}
else if (time.Enabled == false)
{
button1.Text = "结束";
time.Enabled = true;
}; } private void timer1_Tick(object sender, EventArgs e)
{
Random x = new Random();
int y = x.Next(001, 100);
this.lab_yj.Text = y.ToString(); //实现随机数 }
}
}