网站设计和建设,品牌形象设计毕业设计,网站模块分类,企业如何进行品牌推广定义
进程
进程#xff08;Process#xff09;是Windows系统中的一个基本概念#xff0c;它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程#xff0c;进程可以包括一个或多个线程。 程序是在特定操作系统上的可执行文件#xff0c…定义
进程
进程Process是Windows系统中的一个基本概念它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程进程可以包括一个或多个线程。 程序是在特定操作系统上的可执行文件它是一个静态的概念。 而进程可以被认为是程序的一个动态的概念它有自己的地址空间能执行一些操作。程序的执行都会伴随着进程的生成一个程序的执行会产生一个或多个进程。
线程
线程是进程的一个实体是独立运行和独立调度的基本单位CPU上真正运行的是线程。线程自己基本上不拥有系统资源只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)但它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 在.NET中一般以Main()方法作为入口的当调用此方法时系统就会自动创建一个主线程。 线程主要是由CPU寄存器、调用栈和线程本地存储器Thread Local StorageTLS组成的。 CPU寄存器是CPU内部用来存放数据的一些小型存储区域用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路但这种时序逻辑电路只包含存储电路在线程中主要记录当前所执行线程的状态。 调用栈是用来存储有关正在运行的子程序的返回地址的栈在此主要用于维护线程所调用到的内存与数据通过访问调用栈可以查找到调用的子程序。 TLS分为静态和动态两种就是基于堆栈的全局变量或者静态变量来访问数据主要用于将将数据和执行的特定的线程联系起来。
区别
进程拥有自己的资源空间每启动一个进程系统就会为它分配地址空间而线程与CPU资源分配无关多个线程共享同一进程内的资源使用相同的地址空间。一个进程可以包含若干个线程。同一进程的线程间可以共享全局变量、静态变量等数据而进程之间的通信需要以通信的方式Inter Process CommunicationIPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。多进程程序更健壮多线程程序只要有一个线程死掉整个进程也死掉了而一个进程死掉并不会对另外一个进程造成影响因为进程有自己独立的地址空间。进程可以通过管道、套接字、信号交互、共享内存、消息队列等等进行通信而线程本身就会共享内存指针指向同一个内容交互很容易。
多线程
创建多线程步骤
1、编写线程所要执行的方法。
2、实例化Thread类并传入一个指向线程所要执行方法的委托ThreadStart或ParameterizedThreadStart。 Thread threadnew Thread(new ThreadStart(method))该委托中作为参数的方法不需要参数并且没有返回值。也可以分开写 ThreadStart threadStartnew ThreadStart(Calculate); Thread threadnew Thread(threadStart); ParameterizedThreadStart可以委托一个方法利用这个方法可以向线程传递参数参数类型必须是Object的。
3、调用Thread实例的Start方法。thread.Start();
线程的属性
下面程序里列了一些比较常用的属性。
using System;
using System.Threading;namespace 多线程
{class Program{static void Main(string[] args){Thread thread1 new Thread(new ThreadStart(Thread1));//thread1.IsBackground true;//标记为后台线程thread1.Start();//获取当前正在运行的线程Thread threadThread.CurrentThread;thread.Name 当前线程;//获取当前线程的唯一标识符int id thread1.ManagedThreadId;//获取当前线程的状态ThreadState state thread1.ThreadState;//获取当前线程的优先级ThreadPriority priority thread1.Priority;//挂起线程//thread1.Suspend();中止线程//thread1.Abort();string str string.Format(Thread ID:{0}\n Thread Name:{1}\n Thread State:{2}\n Thread Priority:{3}\n, id, thread.Name,state, priority);Console.WriteLine(str);Console.ReadKey();}static void Thread1(){Console.WriteLine(无参线程!);}}
}同步
线程的同步是指在同一时间只有一个线程可以访问变量,对于多线程程序来讲,需要使用关键字Lock,可以把一段代码定义为互斥段互斥段在一个时刻内只允许一个线程进入执行而其他线程必须等待. Lock(expression) { statement_block } 如果锁住一个类的实例可以使用this,在类内的方法里使用lock (this); 如果锁住一个静态变量一般使用类名.
跨线程访问
需要使用方法回调完成跨线程.
namespace 多线程1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//定义回调private delegate void setTextValueCallBack();//声明回调private setTextValueCallBack a;private void button1_Click(object sender, EventArgs e){//实例化回调a new setTextValueCallBack(SetValue);//创建一个线程去执行这个方法Thread thread new Thread(new ThreadStart(Test));//将线程设置为后台线程thread.IsBackground true;thread.Start();}private void Test(){//使用回调,invoke方法可以激活控件所在线程,从而调用控件.invoke(回调,参数(调用方法的参数)).invoke表是同步(会等回调方法执行完后再执行下一步)、begininvoke表示异步(不等直接执行下一步)textBox1.Invoke(a);}/// summary/// 定义回调使用的方法/// /summaryprivate void SetValue(){this.textBox1.Text 1;}}
}线程池
未完待续 下面线程池讲的非常形象. 图解 | 原来这就是线程池 参考链接如下: C#多线程