
多线程
小目标一个亿
这个作者很懒,什么都没留下…
展开
-
进程和线程的区别
进程=火车线程=车厢1、线程是在进程下进行的(单纯的车厢是无法运行)2、一个进程包含多个线程(一个火车有多个车厢)3、不同进程数据很难共享(一辆火车上的乘客很难换到另外一辆火车上)4、同一个进程不同线程的数据很容易共享(在一个火车上,我从A车厢换到B车厢就很容易)5、进程要比线程消耗更多的计算机医院(多列火车相对于多个车厢来说,消耗的资源就会更多)6、进程之间不会相互影响,但是如果一个线程挂掉了,将导致整个进程都挂掉(一辆火车不会影响到另外一辆火车,但是如果一辆火车其中的一节车厢着火了,那这辆原创 2021-12-04 11:33:42 · 4093 阅读 · 0 评论 -
TaskFactory的简单使用
上代码:目前有方法Coding: private void Coding(string name) { Console.WriteLine($"Coding开始"); Thread.Sleep(3000); Console.WriteLine($"参数:{name},本次线程ID是{Thread.CurrentThread.ManagedThreadId.ToString("00")}");原创 2020-05-11 16:50:00 · 10332 阅读 · 0 评论 -
Task创建任务的几种方法
首先介绍一下Task,Task有什么用,说白了Task就是线程池ThreadPool的升级版,它弥补了ThreadPool的一些不足,比如说ThreadPool不支持线程的取消、完成、失败通知、执行的先后顺序等等,要实现这些功能需要完成额外的工作。创建task的方式有很多,我在这先简单介绍几种方式一:先创建,后执行Task task = new Task(() => { //方法体 });task.Start();方式二:创建并执行Task task = Ta原创 2020-05-11 15:42:51 · 8368 阅读 · 0 评论 -
ManualResetEvent的使用-类似ThreadPool中的jion、Task中的WaitAll
需求:当线程池中的任务都完成时,打印“所有任务已完成”代码: bool pool = ThreadPool.SetMaxThreads(9, 9); if (pool) { ThreadPool.QueueUserWorkItem(o => this.DoSomethingLong("参数1")); ThreadPool原创 2020-05-11 12:51:36 · 6266 阅读 · 0 评论 -
线程池ThreadPool中QueueUserWorkItem的使用
先看代码: //设置可以同时处于活动状态的线程池的请求数目。 bool pool = ThreadPool.SetMaxThreads(8, 8); if (pool) { ThreadPool.QueueUserWorkItem(o => this.DoSomethingLong("参数1")); ThreadPool原创 2020-05-11 10:57:46 · 14834 阅读 · 2 评论 -
线程池SetMaxThreads设置最大并发数量返回false的原因
设置SetMaxThreads返回false的原因就是,设置的值小于计算机处理器的数量,比如:我的电脑处理器有8个:当我设置ThreadPool.SetMaxThreads(7, 7);就会返回false当我设置ThreadPool.SetMaxThreads(8, 8);就对返回true...原创 2020-05-11 10:32:07 · 7184 阅读 · 0 评论 -
Thread常用使用方法
1、定义线程委托 ThreadStart method = () => { //执行代码 };2、初始化线程 Thread thread = new Thread(methodA);3、开启线程 thread.Start();4、线程等待X毫秒执行 thread.Sleep(X);//这个是同步的 程序会卡X毫秒5、暂停线程 thread.Suspend();6、恢复线程 thread.Resume()...原创 2020-05-09 16:18:43 · 7819 阅读 · 1 评论 -
Invoke、BeginInvoke和EndInvoke用法
先看代码: Action act = () => { Console.WriteLine("我是无参无返回值"); }; Func<int> func = () => { Thread.S...原创 2020-05-08 17:11:44 · 6778 阅读 · 0 评论 -
进程和线程的解释
1、什么是进程? 当一个程序开始运行时,他就是一个进程,进程包括进行中的程序和程序所使用到的内存和系统资源,而进程又是由多个线程所组成的。2、什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。3、什么是多线程? 多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线...原创 2020-05-08 15:20:56 · 6131 阅读 · 0 评论 -
异步委托用法
下面创建一个异步委托并获取异步委托的值 class Program { static void Main(string[] args) { Console.WriteLine("主线程id:"+Thread.CurrentThread.ManagedThreadId); //定义一个委托 ...原创 2019-12-31 16:44:44 · 4383 阅读 · 1 评论 -
跨线程访问
创建一个Winfrom程序点击“测试”,创建一个线程,从0循环到10000给文本框赋值,代码如下:public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnS...原创 2019-12-31 15:51:20 · 4725 阅读 · 0 评论 -
线程同步实现锁机制以抢票为例
为了更好的理解锁机制,我们来做一个抢票例子:class Program { static void Main(string[] args) { Ticket ticket = new Ticket(); //创建两个线程同时访问Sale方法 Thread t1 = new Thre...原创 2019-12-30 18:05:49 · 4768 阅读 · 1 评论 -
非线程安全与线程同步及lock的使用
线程安全:就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全:就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据其实普通的多线程确实很简单,但是一个安全的高效的多线程却不那么简单。所以很多时候不正确的使用多线程反倒会影响程序的性能。下面先看...原创 2019-12-30 17:41:58 · 4416 阅读 · 2 评论 -
线程执行非静态方法、参数为自定义类型
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 线程执行非静态方法_参数为自定义类型{ class Program { ...原创 2019-12-30 16:44:58 · 4513 阅读 · 0 评论 -
线程池
使用 ThreadStart 和 ParameterizedThreadStart 创建线程还是比较简单的,但是由于线程的创建和销毁需要耗费一定的开销,过多的使用线程反而会造成内存资源的浪费,从而影响性能,出于对性能的考虑,于是引入了线程池的概念。线程池并不是在 CLR 初始化的时候立刻创建线程的,而是在应用程序要创建线程来执行任务的时候,线程池才会初始化一个线程,初始化的线程和其他线程一样,但是...原创 2019-12-30 15:46:12 · 4314 阅读 · 0 评论 -
构造有参数的线程ParameterizedThreadStart
构造有参数的线程就得需要用到ParameterizedThreadStart,查看从元数据可以看出ParameterizedThreadStart是一个委托,参数类型必须是Object类型。我们通过线程对象的Start方法可以将参数传入,如thread.Start("20191230"),此时参数“20191230”就会传递给子线程要执行的方法。代码: class Program ...原创 2019-12-30 15:05:50 · 5086 阅读 · 0 评论 -
前台线程和后台线程的理解
线程有两种:前台线程和后台线程。区别是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。主线程退出,不管后台线程有没有执行完,都会把后台线程结束掉: static void Main(string[] args) { Console.Wri...原创 2019-12-30 14:34:24 · 7397 阅读 · 0 评论 -
多线程的初步理解
在C#中,线程是使用Thread类处理的,该类在System.Threading命名空间中。使用Thread类创建线程时,只需要提供线程入口,线程入口告诉程序让这个线程做什么(即提供一个方法)。通过 Thread类 可以控制当前应用程序域中线程的创建、挂起、停止、销毁。以下是Thread常用的一些属性:Thread 的优先级:创建一个简单的多线程: class Progr...原创 2019-12-30 11:29:15 · 4132 阅读 · 0 评论 -
程序运行原理
程序执行靠线程。1、分时调度所有线程轮流使用CPU,平均分配每个线程占用CPU的时间。2、抢占式调度优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,这就是线程随机性。可以在任务管理器中的“详细信息”中改变线程的优先级(qq无法截图,用手机拍的,有点模糊)抢占式调度详解:大部分操作系统都支持多进程并发运行,现在的操作系统几乎都支持同时运行多个...原创 2019-12-28 17:25:24 · 4479 阅读 · 0 评论 -
进程、线程及多线程的概念
什么是进程、线程及多线程进程:一个应用程序开始运行,那么就会存在一个属于这个应用程序的进程。进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。也即是说:进程是指在系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,...原创 2019-12-28 16:51:51 · 4322 阅读 · 0 评论