C#学习笔记
文章平均质量分 67
主要是分享学习C#中的笔记和心得
HollowKnightZ
菜鸟一枚
展开
-
C#多线程学习笔记十四
多线程中常遇到的问题和调试CPU占用率过高问题死锁问题内存爆满使用WIndbg来查看线程和堆栈,利用ILSpy反编译代码找到问题可能在的地方。CPU占用率过高问题例如下面这段程序,加入while循环中有一个复杂的程序导致死循环,久而久之会导致CPU占用率过高。static void Run(){ Task task = Task.Factory.StartNew(() => { var i = true; //假设这里有一个复杂的程序导致死循原创 2021-01-31 08:17:30 · 683 阅读 · 0 评论 -
C#多线程学习笔记十三
四大线程安全的并发集合类ConcurrentBagConcurrentStackConcurrentQueueConcurrentDictionaryC#4.0前所有的集合都是线程不安全的。ConcurrentBag从ILSpy中可见ConcurrentBag的数据结构:ThreadLocal:线程可见性,每个线程有自己的存储内容1.每个线程分配一个“链表”,这个“链表”可以认为是List(ThreadLocalList)每当有Add操作,locals里面就有一份新增的数据【本线程可见】,同时原创 2021-01-31 08:17:15 · 402 阅读 · 0 评论 -
C#多线程学习笔记十二
锁机制用户模式锁易变构造互锁结构:Interlocked旋转锁:SpinLock内核模式锁事件锁信号量:Semaphore互斥锁:mutex读写锁:ReaderWriterLockCountDownEvent监视锁混合模式锁ManualResetEventSlimReaderWriterLockSlimSemaphoreSlim在.net中锁机制很多,事件锁,信号量,互斥锁,读写锁,互锁,易变构造等。分类:<1>用户模式锁【就是通过一些CPU指令或者一个死循环】来达到thread等待和休原创 2021-01-31 08:16:53 · 336 阅读 · 2 评论 -
C#多线程学习笔记十一
async await这两个关键词是专用于处理一些IO优缺点这两个关键词是专用于处理一些IO网络IO,文件IO都有一些异步方法:MemoryStream,FileStream,WebRequeststatic void Main(string[] args){ Console.WriteLine(GetString().Result); Console.ReadLine();}async static Task<string> GetString() { Fil原创 2021-01-31 08:16:27 · 113 阅读 · 0 评论 -
C#多线程学习笔记十
TaskScheduleTaskSchedule的作用在.net framework中有两种TaskScheduleTaskSchedule的作用任务执行都要经过Schedule,因为Task的核心就是Schedule,因为他要考虑把任务如何安排在线程或者线程池中。在.net framework中有两种TaskScheduleThreadPoolTaskScheduleTask的默认调度形式 ThreadPoolSynchronizationContextTaskSchedule如图,在w原创 2021-01-30 18:36:12 · 201 阅读 · 0 评论 -
C#多线程学习笔记九
PLinq如何将Linq转换为PLinqAsParallelAsOrderedAsSequentialWithDegreeOfParallelismWithCancelLationWithExecutionModeWithMergeOptions如何将Linq转换为PLinqvar nums = Enumerable.Range(0,100);var query = from n in nums select new { t原创 2021-01-30 18:35:53 · 429 阅读 · 1 评论 -
C#多线程学习笔记八
Parallel.netFramework有一些模型对Task进行了封装ForForEachInvoke.netFramework有一些模型对Task进行了封装这些类封装了Task,所以可以用这些类来进行并行编程。Parallel称为 平行算法,用白话说,就是为了充分利用电脑多核处理器的优势,使得每隔核心都可以努力干活,不让他们闲着,来提高运行效率。ForParallel.For(1, 10, (item) =>{ Console.WriteLine(item);});输出结果原创 2021-01-30 18:35:32 · 165 阅读 · 0 评论 -
C#多线程学习笔记七
带返回值的Task获取Task的返回值获取ContinueWith的返回值获取WhenAll/WhenAny的返回值异常获取Task的返回值Task<int> task = Task.Factory.StartNew(()=> { return 1; });task.Wait();Console.WriteLine(task.Result);获取ContinueWith的返回值Task<int> task = Task.Factory.StartNew(()=原创 2021-01-30 18:35:04 · 420 阅读 · 1 评论 -
C#多线程学习笔记六
Task中的取消功能Thread中的取消操作Task中的取消操作使用cancel实现isStop同样的功能Thread中的取消操作isStop变量判断thread是否可以退出bool isStop = false;Thread thread = new Thread(() =>{while (!isStop) {Thread.Sleep(100); Console.WriteLine("当前Thread正在运行。"); }});thread.Start()原创 2021-01-30 18:34:16 · 215 阅读 · 0 评论 -
C#多线程学习笔记五
Task中常见的两种枚举 Task构造函数中使用的枚举AttachedToParentDenyChildAttachHideSchedulerLongRunningPreferFairness任务延续中使用的枚举LazyCancellationExecuteSynchronouslyNotOnRanToCompletion、OnlyOnRanToCompletionNotOnFaulted、OnlyOnFaultedNotOnCanceled、OnlyOnCanceled总结Task构造函数中使用的枚举原创 2021-01-30 18:33:56 · 287 阅读 · 0 评论 -
C#多线程学习笔记四
Task from .net 4.0Task简介Task的启动方式Task和ThreadPoolTaskTask简介为什么要有Task?Thread:容易造成时间和空间的开销,而且使用不当容易造成线程过多,导致时间片切换ThreadPool:控制能力比较弱,比如做Thread的延续,阻塞,取消,超时等功能不能实现,ThreadPool的控制权在CLR,而不在自己。Task => Thread + ThreadPool + 优化 + 功能扩展Task看起来像一个Thread,但是在Thread原创 2021-01-30 18:33:31 · 182 阅读 · 0 评论 -
C#多线程学习笔记三
线程池ThreadPoolThreadPoolThreadPool的使用方式ThreadPool与Thread的区别线程池中的线程:工作线程和IO线程总结ThreadPoolThread => 一个异步任务开启一个Thread,具有专有性ThreadPool => 开启异步任务只需要向其借用线程,使用完后归还ThreadPool的使用方式ThreadPool.QueueUserWorkItem((obj) =>{var Fun = obj as Func<stri原创 2021-01-30 18:33:00 · 273 阅读 · 0 评论 -
C#多线程学习笔记二
Thread中的一些静态方法线程可见AllocateDataSlot、SetData、 GetData性能提升版:ThreadStaticThreadLocal:也叫做线程可见性总结线程可见AllocateDataSlot、SetData、 GetDatavariable var => thread t1,t2(1) t1,t2 共享var => public 有“锁”的问题(2) t1,t2 各自有一个var => internal 没有锁争用的问题var slot = T原创 2021-01-30 18:32:16 · 246 阅读 · 1 评论 -
C#多线程学习笔记一
线程时间空间上的开销线程空间上的开销Thread的数据结构用户模式堆栈内核模式堆栈线程时间上的开销进程启动时会加载很多dll、exe、资源、元数据时间片切换线程空间上的开销Thread的数据结构Thread的内核数据结构其中有osid(线程ID),context(上下文)=> CPU寄存器的一些变量(时间片,一个时间片30ms)用户模式堆栈一个线程分配1M的堆栈空间存放一些【参数或局部变量】内核模式堆栈在CLR的线程操作,包括线程同步,大多都是调用底层的win32函数,用户模式堆栈需要原创 2021-01-30 18:31:45 · 191 阅读 · 1 评论