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