随笔分类 -  异步编程

异步编程
摘要:前言 假如现在有一个这样的需求,我一堆小黄人生产小黄丹,而大黄人要一直吃小黄丹。 如果是这样的话,想到就是一堆小黄人作为一个多线程,然后一直制造,然后另外一个大黄人一直检索是否有小黄丹,有就吃掉。 但是这样是相当消耗性能的,因为大黄人一直在检索啊。 那么是否可以这样,当小黄人生产10颗的时候让大黄人 阅读全文
posted @ 2020-07-02 15:40 敖毛毛 阅读(267) 评论(0) 推荐(0)
摘要:前言 互斥锁(Mutex) 互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。 互斥锁可适用于一个共享资源每次只能被一个线程访问的情况。 正文 代码: static void Main(string[] args) { const string MutexName = "Csha 阅读全文
posted @ 2020-07-02 15:26 敖毛毛 阅读(458) 评论(0) 推荐(0)
摘要:前言 在高并发中,一个很关键的问题就是要避免死锁。 那么为什么会产生死锁呢?这种情况多见吗? 举一个例子: 比如方法一中先lock(object1),在lock(object1)中lock(object2)。 方法二种则相反。 那么这时候可以看出,如果方法一中lock了object1,这时候请求ob 阅读全文
posted @ 2020-07-02 14:13 敖毛毛 阅读(940) 评论(0) 推荐(0)
摘要:前言 我们在使用线程的时候,如果多个线程数去访问一个资源的时候,那么是非常影响程序的运行的,因为如果有写的操作,那么需要写锁,那么线程都会堵在同一个地方,那么我们可以限制一下访问一个资源的线程数。 正文 static SemaphoreSlim _semaphore = new SemaphoreS 阅读全文
posted @ 2020-07-01 16:58 敖毛毛 阅读(639) 评论(0) 推荐(0)
摘要:前言 在异步中如何控制两个线程这样运动呢,在A线程执行到某个位置的时候等待B线程执行,然后B运行到某个位置有又开始运行A,这时候可以用AutoResetEvent。 正文 代码: private static AutoResetEvent _workerEvent = new AutoResetEv 阅读全文
posted @ 2020-07-01 16:48 敖毛毛 阅读(353) 评论(0) 推荐(0)
摘要:前言 后续会把异步编程的ManualResetEventSlim 深入写完,先简单介绍一下吧。 ManualResetEventSlim 有set 方法和 reset 、wait、dispose方法。 ManualResetEventSlim wait 方法 阻止当前线程,直到设置了当前 Manua 阅读全文
posted @ 2020-07-01 16:29 敖毛毛 阅读(4031) 评论(1) 推荐(0)
摘要:前言 这篇已经做了一个总结,我来 https://www.cnblogs.com/yy1234/p/8073732.html 1、Thread.Sleep 是同步延迟,Task.Delay异步延迟。 2、Thread.Sleep 会阻塞线程,Task.Delay不会。 3、Thread.Sleep不 阅读全文
posted @ 2020-06-30 16:17 敖毛毛 阅读(1367) 评论(0) 推荐(1)
摘要:前言 这个直接上代码。 代码逻辑是使用var tokenSource = new CancellationTokenSource(); 让tokenSource 去取消。值得注意的是取消线程后,线程会产生异常,可以在try catch 中查看,可以运行下面代码即可查看到一个完整的逻辑。 正文 sta 阅读全文
posted @ 2020-06-30 15:44 敖毛毛 阅读(3316) 评论(0) 推荐(0)
摘要:前言 回忆一下以前是怎么写线程的。这种方式.net core 已经不支持了,所以看看就好,或者有些老项目中使用。 正文 private static int Calculate(int a, int b) { System.Threading.Thread.Sleep(1000 * 10);//假如 阅读全文
posted @ 2020-06-30 15:11 敖毛毛 阅读(112) 评论(0) 推荐(0)
摘要:前言 有时候我们希望某个线程更加重要,希望让其先运行的话。c#为我们提供了线程修改优先级。但是这样的效果有多大呢? 正文 直接放代码: static void Main(string[] args) { Console.WriteLine($" current thread priority:{Th 阅读全文
posted @ 2020-06-30 14:47 敖毛毛 阅读(1247) 评论(0) 推荐(0)
摘要:前言 下面介绍多线程传值的几种方式,并说明注意点。 正文 static void Main(string[] args) { SampleTread thead = new SampleTread(10); var theadone = new Thread(thead.CountNumbers); 阅读全文
posted @ 2020-06-30 14:09 敖毛毛 阅读(267) 评论(0) 推荐(0)
摘要:前言 把异步先总结完吧。 countDownEvent 这东西是干什么的呢? 比如说我们比赛跑步,我们需要得出的是第一二三名得出后就可以先统计出来,因为比较重要,后面没有获得获奖名次的可以后续统计出来。 正文 static void Main(string[] args) { Console.Wri 阅读全文
posted @ 2020-06-30 13:50 敖毛毛 阅读(598) 评论(0) 推荐(0)
摘要:前台和后台线程 Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时 阅读全文
posted @ 2020-06-26 17:32 敖毛毛 阅读(620) 评论(0) 推荐(0)
摘要:前言 在我们使用多线程的时候,我们会发现我们必须面临一个线程安全的问题,就是说多个线程操作同一个数据可能产生的问题是否得到解决。 对于异步线程,常常提及到锁这个概念,而我们知道锁是一个非常消耗性能的东西,而对于c# 是给我们封装了原子操作,对我们的锁进行了一些优化。在多线程的时候我们依然可以用原子操 阅读全文
posted @ 2020-06-24 14:23 敖毛毛 阅读(3343) 评论(0) 推荐(0)
摘要:前言 线程中join,英文翻译过来是加入的意思。 简单点说,就是插队。 正文 。。。A线程执行前段 。。。。 B.join() 。。。A线程执行后段。。。。 就是B加入进来了,要执行B的代码了,所以意思就是当B没有执行完,A是不会执行的。这种情况是需要的,比如说A中需要B处理完的数据。 而还有一种情 阅读全文
posted @ 2020-06-21 10:27 敖毛毛 阅读(200) 评论(0) 推荐(0)
摘要:理解: ``` 在C#中,Thread.Suspend是一个方法,用于暂停当前线程的执行。它会导致线程停止执行并进入挂起状态,直到调用Thread.Resume方法才能继续执行。 然而,Thread.Suspend方法已被标记为不推荐使用,并且在未来的版本中可能会被移除。这是因为使用Thread.S 阅读全文
posted @ 2020-06-21 10:22 敖毛毛 阅读(557) 评论(0) 推荐(0)
摘要:前言 续第七章。 正文 数据流块的并行处理 数据流块在网格上本身就是并行的,为什么这么说呢? 加入有两个数据库,他们链接在一起,然后给他们post数据。 当数据流块一在运行的时候,数据流块二也在执行,他们是并行的。 那么我上面说的是数据流块本身并行。也就是说一个数据流块可以同时处理多组数据。 在Mi 阅读全文
posted @ 2020-04-21 16:57 敖毛毛 阅读(163) 评论(0) 推荐(0)
摘要:前言 什么是TPL?全称:transmission control protocol 传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。 然后思维方式回到为什么有这个TPL 数据流上。 TPL 数据流库向具有高吞吐量和低滞后时间的占用大量 CPU 和 I/O 操作的应用程序的并行化 阅读全文
posted @ 2020-04-17 17:44 敖毛毛 阅读(420) 评论(0) 推荐(1)
摘要:前言 续前一章。 1.并行调用 2.动态并行 3.并行linq 并行调用 指的是调用一批方法,并且这些方法是(大部分)相互独立的。 static void ProcessArray(double[] array) { Parallel.Invoke( () => { ProcessPartialAr 阅读全文
posted @ 2020-04-16 09:36 敖毛毛 阅读(174) 评论(0) 推荐(0)
摘要:前言 并行编程,先来看下概念。并行编程用于分解计算密集型的任务片段,并将它们分配给多个线程。 划重点,这个是计算密集型的东西,而不是IO密集型。也就是说切割成的片段用于计算使用cpu计算,而不是内存。 如果一个操作时内存密集型那么并行处理是会起反的效果的,因为io意味着等待。原本等待一段的,现在每一 阅读全文
posted @ 2020-04-14 17:19 敖毛毛 阅读(304) 评论(0) 推荐(2)