C#线程基础知识

多线程和多进程的区别

任务管理器里各种不同的进程就是多进程,或者是你同时运行多个”.exe’程序就可以理解为多进程,多进程是要更多消耗CPU资源的。

多线程是相对于进程里更小的单位,比如3个线程在1个进程里进行不同的操作,他们所拥有的资源就是那个进程里的资源,不会占用更多资源,只是通过线程更合理的分配资源。

 

运行一个控制台项目.exe,就会生成一个进程,在此进程中会生成一条主线程(主要负责执行Main函数中的代码);

 

什么是进程?

进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。

一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。

 

什么是线程?

线程是操作系统分配处理器时间的基本单元,也是一个独立的运行单 元,每个进程内部都有多个线程,每个线程都可以各自同时执行指令。每个线程都有自己独立的栈,但是与进程内的其他线程共享内存。但是对于.NET的客户端程序(Console,WPF,WinForms)是由CLR创建的单线程(主线程,且只创建一个线程)来启动。在该线程上可以创建其他线程。

 

Thread类:

构造函数:

Thread(ThreadStart method)  无参无返回值类型的方法

Thread(ParameterizedThreadStart method) 无返回值类型,有一个object参数的方法

属性:

static CurrentThread 返回当前正在运行的线程

Name 设置/返回线程的名字

IsBackground 是否是后台线程

Priority 设置优先级的

方法:

Start() 启动线程,调用无参无返回值的函数

Start(Object pram) 启动线程,pram传参给有参数的方法; 

Sleep(int 毫秒) 让线程休眠,处于暂停执行的状态

Abort() 终止线程

Join(int 毫秒) 挂起(暂停)正在调度的线程,直到被调度的线程执行完毕后,该线程才继续执行

 

线程优先级

系统优先执行优先级较高的线程

但这只意味着优先级较高的线程占有更多的CPU时间

并不意味着一定要先执行完优先级较高的线程,才会执行优先级较低的线程。

同步锁

lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

 lock 关键字在块的开始处调用 Enter,而在块的结尾处调用 Exit

 

 在多线程中,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。 

 

打个比方,有这样一个情景,很多公司所在的大厦的厕所的蹲位都是小单间型的,也就是一次只能进去一个人,那么为了避免每次进去一个 人,那怎么做呢?不就是一个人进去之后顺手把门锁上么?这样你在里面干啥事,外边的人也只能等待你解放完了,才能进入。而蹲位的资源(蹲位,手纸等)是共享的。

常用的锁的格式如下:

private static readOnly Object lockObj=new Object(); 

public void Fun(){
lock(lockObj){
//执行代码
}
}

 

猜你喜欢

转载自blog.csdn.net/qq_42485607/article/details/81209269