C#多线程编程
文章平均质量分 89
dz45693
我是一个软件开发人员,有较强的责任心,是一个典型的技术爱好者。在此希望能认识更多好朋友。
展开
-
c# 异步进阶————channel
该系列为异步编程的进阶篇,其实也不能这么讲。世界上本没有进阶篇,只能说是高级篇(高级篇不能说多高级,是对底层的封装的意思),只要是加深理解都是进阶。本章先介绍一下channel。转载 2022-08-30 11:13:42 · 1953 阅读 · 0 评论 -
异步性能:了解 Async 和 Await 的成本
c#多线程读写锁转载 2011-05-26 14:12:00 · 3255 阅读 · 0 评论 -
Async/Await 异步编程中的最佳做法
最近用C#写一个监护进程的工具1.停止进程的时候用Process的Kill方法,发现杀不掉用户名为SYSTEM的进程。2.用WMI杀进程,但是发现可以停止用户名为SYSTEM的进程,而其他用户名的进程却停止不了。3.最后用API下的TerminateProcess的方转载 2011-08-31 16:20:22 · 3144 阅读 · 0 评论 -
C# CancellationTokenSource和CancellationToken的实现
微软关于CancellationTokenSource的介绍很简单,其实CancellationTokenSource的使用也很简单,但是实现就不是那么简单了,我们首先来看看CancellationTokenSource的实现:public class CancellationTokenSource : IDisposable{ private const int CANNOT_原创 2017-11-29 13:52:00 · 3930 阅读 · 0 评论 -
C# ManualResetEventSlim 实现
ManualResetEventSlim通过封装 ManualResetEvent提供了自旋等待和内核等待的组合。如果需要跨进程或者跨AppDomain的同步,那么就必须使用ManualResetEvent,而不能使用ManualResetEventSlim。那么首先我们看看 ManualResetEvent和AutoResetEvent的使用特点,只有搞清楚了ManualResetEvent才可原创 2017-11-24 22:44:06 · 2956 阅读 · 0 评论 -
C# SemaphoreSlim 实现
当多个任务或线程并行运行时,难以避免的对某些有限的资源进行并发的访问。可以考虑使用信号量来进行这方面的控制(System.Threading.Semaphore)是表示一个Windows内核的信号量对象。如果预计等待的时间较短,可以考虑使用SemaphoreSlim,它则带来的开销更小。.NetFrameWork中的信号量通过跟踪进入和离开的任务或线程来协调对资源的访问。信号量需要知道资源的最大数原创 2017-11-25 12:22:21 · 5449 阅读 · 0 评论 -
C# CountdownEvent实现
关于CountdownEvent网上的介绍比较少,因为它是实现和使用都很简单,先看看网上的一些评论吧:CountDownEvent调用成员函数Wait()将阻塞,直至成员函数Signal() 被调用达特定的次数,这时CountDownEvent称作就绪态,对于处于就绪态的CountDownEvent,调用Wait()函数将不会再阻塞,只有手动调用Reset()函数后,调用Wait()函数将原创 2017-11-25 23:31:53 · 2960 阅读 · 0 评论 -
C# Barrier 实现
当您需要一组任务并行地运行一连串的阶段,但是每一个阶段都要等待所有其他任务都完成前一阶段之后才能开始,你一通过Barrier实例来同步这一类协同工作。Barrier初始化后,将等待特定数量的信号到来,这个数量在Barrier初始化时指定,在所指定的信号个数已经到来后,Barrier将执行一个指定的动作,这个动作也是在Barrier初始化时指定。Barrier在执行动作过后,将会重置,这时又将等原创 2017-11-26 01:14:58 · 2094 阅读 · 0 评论 -
C# 同一应用程序域不同线程之间的参数传递方式
很久没有写博客了,最近的项目不用写代码。今天没事就看看thread之间的参数传递方式,这里主要适用于运行在不同线程的两个方法之间参数传递。直接看代码1。方法之间直接传递参数 void DemoParam() { Console.WriteLine("DemoParam:" + Thread.CurrentThread.ManagedT原创 2014-11-06 16:30:51 · 2832 阅读 · 0 评论 -
AutoResetEvent
C#读写者线程(用AutoResetEvent实现同步)1. AutoResetEvent简介通知正在等待的线程已发生事件。无法继承此类。常用方法简介:AutoResetEvent(bool initialState):构造函数,用一个指示是否将初始状态设置为终止的布尔值初始化该类的新实例。 false:无信号,子线程的WaitOne方法不会被自动调用 true原创 2011-04-12 09:01:00 · 3253 阅读 · 0 评论 -
ASP.NET - 将 ASP.NET 用作高性能文件下载器
作者 Doug Duerner、Yeon-Chang Wang | 2015 年 11 月 | 获取代码: C#VB缓慢故障连接一直都是大型文件下载问题的症结所在。您可能会在机场大厅用不完善的 WiFi 连接收集媒体,以便在长途飞行中制作演示文稿;也可能会在非洲大草原上尝试通过太阳能水泵的卫星链接下载大型安装文件。无论是哪种情况,大型文件下载故障的代价都是相同的:既浪费了时间、转载 2017-12-02 16:38:19 · 2768 阅读 · 0 评论 -
C# Parallel.Invoke 实现
Parallel.Invoke应该是Parallel几个方法中最简单的一个了,我们来看看它的实现,为了方法大家理解,我尽量保留源码中的注释: public static class Parallel { internal static int s_forkJoinContextID; internal const int DEFAULT_LOOP_S原创 2017-12-01 18:50:26 · 3191 阅读 · 0 评论 -
C# IOThread
在看微软的ASP.NET - 将 ASP.NET 用作高性能文件下载器 示例里面用到了IO 线程,以前打算自己撸的,这里贴出来 已标记一下://////////////////////////////////////////////////// // A delegate's BeginInvoke runs on a "worker thread" inside the CLR Th原创 2017-12-02 17:07:24 · 2951 阅读 · 0 评论 -
.NET Threadpool的一点认识
说到.NET Threadpool我想大家都知道,只是平时比较零散,顾现在整理一下:一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相.NET Threadpool starvation, and how queuing makes it worseNew and Improved CLR 4 Thread Pool Engine所以本文主要是验证和这...原创 2018-11-06 16:23:33 · 2917 阅读 · 0 评论 -
浅谈async、await关键字 => 深谈async、await关键字
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了。但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug,特别是如果连线程基础没有理解的情况下,更不知道如何去处理了。那今天我们就来好好看看这两兄弟和他们的叔叔(Task)爷爷(Thread)们到底有转载 2014-07-16 20:58:43 · 3627 阅读 · 0 评论 -
C# ReaderWriterLockSlim 实现
其实ReaderWriterLockSlim的实现前段时间看了,当时不打算记录下来的,因为它的实现实在System.Core项目里面,而不是mscorlib项目。按照惯例我们还是先看看网上的一些说法吧。读写锁 ReaderWriterLock 、就是支持单个写线程和多个读线程的锁。自.NET 3.5 开始 ReaderWriterLockSlim登上舞台,ReaderWriterLockS原创 2017-12-28 09:52:59 · 3242 阅读 · 0 评论 -
C# Task的GetAwaiter和ConfigureAwait
个人感觉Task 的GetAwaiter和ConfigureAwait也是比较好理解的,首先看看他们的实现public class Task : Task{ //Gets an awaiter used to await this public new TaskAwaiter GetAwaiter() { return new TaskAwaite原创 2017-11-28 13:42:57 · 12003 阅读 · 0 评论 -
C# Task WhenAny和WhenAll 以及TaskFactory 的ContinueWhenAny和ContinueWhenAll的实现
个人感觉Task 的WaitAny和WhenAny以及TaskFactory 的ContinueWhenAny有相似的地方,而WaitAll和WhenAll以及TaskFactory 的ContinueWhenAll也是相同,但是WaitAny和WhenAny的返回值有所不同。我们首先来看看Task WhenAny和WhenAll 的实现吧,public class Task : IThr原创 2017-11-28 12:57:11 · 5461 阅读 · 0 评论 -
C# Task WaitAll和WaitAny
Task 有静态方法WaitAll和WaitAny,主要用于等待其他Task完成后做一些事情,先看看其实现部分吧:public class Task : IThreadPoolWorkItem, IAsyncResult, IDisposable{ //Waits for all of the provided Task objects to complete execution.原创 2017-11-27 19:28:30 · 8996 阅读 · 0 评论 -
C# Task ContinueWith的实现
看了上一篇C# Task 是什么?返回值如何实现? Wait如何实现 我们提到FinishContinuations方法中会调用TaskContinuation实例,那么我们的ContinueWith就应该非常简单,只需要把TASK放到TaskContinuation结合中就可以了,ContinueWith可以是 Action>也可以是 Func,TNewResult> ,其中Task的实现如原创 2017-11-27 12:32:54 · 2682 阅读 · 0 评论 -
C# Task 是什么?返回值如何实现? Wait如何实现
关于Task的API太多了,网上的实例也很多,现在我们来说说Task究竟是个什么东西【task一般用于多线程,它一定与线程有关】,还有它的返回值有事怎么搞的。首先我们以一个最简单的API开始,TaskFactory的StartNew方法,TaskFactory.cspublic Task StartNew(Func function, Object state){ Sta原创 2017-11-26 16:13:59 · 4167 阅读 · 0 评论 -
C# ExecutionContext 实现
网上关于ExecutionContext的说明比较少,我们来看看微软的描述吧, 名称说明Capture()捕获从当前线程的执行上下文。CreateCopy()创建当前执行上下文的副本。Dispose()释放 ExecutionContext原创 2017-11-26 12:00:48 · 2127 阅读 · 0 评论 -
C# Monitor实现
Monitor的code如下,非常简单:public static class Monitor { public static extern void Enter(Object obj); public static void Enter(Object obj, ref bool lockTaken) { if (lockTaken)原创 2017-11-24 21:10:07 · 3377 阅读 · 0 评论 -
C# SpinLock实现
关于SpinLock自旋锁网上已经有很多说明,这里也copy了一部分,我这里主要关注微软的实现,学习人家的实现方式。如果由于垃圾回收,基于对象的锁对象开销太高,可以使用SpinLock结构。.NET 4以后版本可使用,如果你有很多个锁(如,一个列表里面的每一个节点)并且锁时间通常非常的短,使用SpinLock将很有用。你需要避免使用超过一个的SpinLock,并且不要调用任何可能阻塞的。除原创 2017-11-24 18:41:32 · 2419 阅读 · 0 评论 -
C# SpinWait 实现
其实SpinWait的code 非常简单,以前看过很多遍,但是从来都没有整理过,整理也是再次学习吧。我们先看看SpinWait的一些评论或者注意点吧:如果等待某个条件满足需要的时间很短,而且不希望发生昂贵的上下文切换,那么基于自旋的等待是一种很好的替换方案,SpinWait不仅提供了基本自旋功能,而且还提供了SpinWait.SpinUntil方法,使用这个方法能够自旋直到满足某个条件为止原创 2017-11-24 12:15:47 · 5938 阅读 · 1 评论 -
一个http处理工具
紧接着上一篇文章,上篇文章发起了http请求,这篇文章来说说http请求结果的处理吧,还是先看看类图吧:说说这些类干什么的了HtmlRequestInfo 是RequestInfo的子类 主要是在爬网是需要一些特殊的信息。ProcessBase 是处理http返回结果的基类,ProcessHtml 是一个典型的爬虫 ,ProcessJS 处理返回结果中的js,Pro原创 2012-03-27 16:11:12 · 3779 阅读 · 0 评论 -
C# 开发一个旋转锁
以下是我自己在看书的时候开发了旋转锁,可是我对旋转锁本身却不怎么了解,欢迎大家一起探讨。 public partial class SpinLock { private int state; private EventWaitHandle available = new AutoResetEvent(false); private st原创 2010-01-04 21:52:00 · 3112 阅读 · 0 评论 -
Windows Form 线程之间通信
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty原创 2010-03-29 11:16:00 · 6128 阅读 · 4 评论 -
一个http请求工具
最近花了1月的时间写了一个小工具,主要用来爬网,这篇博客先说说这个http请求工具吧。还是先看看整个模块的类图吧:先说说这个类的作用吧:RequestInfo 请求类型参数 ,为了便于后面扩展所以这里封装成一个class 。ResponseInfo 返回参数的类型 返回数据有 请求参数、http返回头和返回体(流的形式)、返回的状态RequestStateObj原创 2012-03-27 15:51:05 · 4579 阅读 · 1 评论 -
Scoket模拟HTTP请求响应的处理
Scoket模拟HTTP请求响应的处理原创 2011-01-18 22:36:00 · 3793 阅读 · 0 评论 -
可扩展多线程异步Socket服务器框架EMTASS 2.0
可扩展多线程异步Socket服务器框架EMTASS 2.0转载 2010-12-11 11:45:00 · 3169 阅读 · 0 评论