摘要: 在与同事讨论async/await内部实现的时候,突然想到Task.Yeild()这个函数,为什么呢,了解一点C#async/await内部机制的都知道,在await一个异步任务(函数)的时候,它会先判断该Task是否已经完成,如果已经完成,则继续执行下去,不会返回到调用方,原因是尽量避免线程切换, 阅读全文
posted @ 2020-07-09 21:45 白烟染黑墨 阅读(1007) 评论(0) 推荐(1) 编辑
摘要: 一、直接使用线程的问题每次都要创建Thread对象,并向操作系统申请创建一个线程,这是需要耗费CPU时间和内存资源的。无法直接获取线程函数返回值无法直接捕捉线程函数内发生的异常 使用线程池可以解决第一个问题二、.NET中的线程池 在这里只简单的介绍一下ThreadPool,由于TPL的存在,我工作中大部分使用的是TPL中的类,这是后面介绍的重点。1. ThreadPool.Qu... 阅读全文
posted @ 2020-07-07 10:43 白烟染黑墨 阅读(1091) 评论(0) 推荐(0) 编辑
摘要: 一、TLS 线程本地存储(Thread Local Storage),字面意思就是专属某个线程的存储空间。变量大体上分为全局变量和局部变量,一个进程中的所有线程共享地址空间,这个地址空间被划分为几个固有的区域,比如堆栈区,全局变量区等,全局变量存储在全局变量区,虚拟地址固定;局部变量存储在堆栈区,虚拟地址不固定。每个线程都有自己的栈空间,局部变量就存储在栈空间里面,虽然这个局部变量是与... 阅读全文
posted @ 2020-07-06 10:22 白烟染黑墨 阅读(707) 评论(0) 推荐(2) 编辑
摘要: 简单来说,使用这个类可以让主线程等待子线程都完成任务之后才执行任务 1 static void Main(string[] args) 2 { 3 ///子任务的数量 4 CountdownEvent countdownEvent = new CountdownEvent(3); 5 for(int 阅读全文
posted @ 2020-07-02 11:25 白烟染黑墨 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 一、 进程 简单来说,进程是对资源的抽象,是资源的容器,在传统操作系统中,进程是资源分配的基本单位,而且是执行的基本单位,进程支持并发执行,因为每个进程有独立的数据,独立的堆栈空间。一个程序想要并发执行,开多个进程即可。Q1:在单核下,进程之间如何同时执行? 首先要区分两个概念——并发和并行并发:并发是指在一段微小的时间段中,有多个程序代码段被CPU执行,宏观上表现出来... 阅读全文
posted @ 2020-06-21 12:53 白烟染黑墨 阅读(2533) 评论(0) 推荐(2) 编辑
摘要: 前言 如标题所诉,本文主要是解决是什么,怎么用的问题,然后会说明为什么这么用。因为我发现很多萌新都会对之类的问题产生疑惑,包括我最初的我,网络上的博客大多知识零散,刚开始看相关博文的时候,就这样。然后博文也不一定正确,又变成这样,当然我的观点也不一定正确,所以,以免误导萌新,有疑问,欢迎提出!有错误,欢迎指正!一、首先看几个问题多线程程序比单线程程序效率高?什么是IO密集型程序?计算... 阅读全文
posted @ 2020-05-17 16:54 白烟染黑墨 阅读(1202) 评论(3) 推荐(5) 编辑
摘要: 我们先看一下执行流程图图中画红圈的部分便是HttpModule,在说创建HttpModule之前,先说一下HttpApplication对象,HttpApplication对象由Asp.net框架创建,每个请求对应一个HttpApplcation实例对象,Asp.Net框架内部维护了一个HttpApplication对象池,可以复用该对象,以便节省服务器资源。HttpApplication对象内部... 阅读全文
posted @ 2020-03-15 15:08 白烟染黑墨 阅读(1416) 评论(0) 推荐(0) 编辑
摘要: ASP.NET WebAPI有两种寄宿模式,一种是WebHost,一种是SelfHost,为什么可以有两种模式的原因在于WebAPI有一个相对独立的消息处理管道,只要给这个消息管道传递一个封装好的对象,便可以得到处理好的结果。而怎么去封装这个对象,如何得到这个对象就不是WebAPI所关心的了。在WebHost模式下,这个对象是由IIS+ASP.NET框架共同完成的,在SelfHost模... 阅读全文
posted @ 2020-03-14 17:34 白烟染黑墨 阅读(560) 评论(0) 推荐(1) 编辑
摘要: 一、线程使用System.Threading命名空间下的Thread类即可创建专有线程var t = new Thread(() => Console.WriteLine("new thread"));构造函数有如下四个版本Thread(ThreadStart start);public Thread(ThreadStart start, int maxStackSize);public Thre... 阅读全文
posted @ 2019-12-25 22:28 白烟染黑墨 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 一.什么是LoaderWebPack默认只“认识”以*.js结尾的文件,如果想处理其他类型的文件,就必须添加Loader,有各种各样的Loader,每个Loader可处理不同类型的文件,每当用WebPack打包时遇到不认识的文件(通过后缀名辨别),如果添加了相应的Loader,就会调用指定的Loader去处理,处理完之后,如果没有后继的Loader去处理这类文件,就会返回给调用端,也就是WebPa... 阅读全文
posted @ 2019-10-18 12:59 白烟染黑墨 阅读(207) 评论(0) 推荐(0) 编辑