Thread,ThreadPool,Task
线程分为前台和后台。比如我们直接new一个Thread这就是前台线程。
前台线程一定会执行。
比如我们创建2个线程:1号,2号,同时执行,假设1号是主线程,1执行完了,依旧会等待2执行完成,整个程序才会结束。
后台线程。
主线程执行完成以后,程序就结束了不会关心后台线程时候执行完毕。
这里说的后台线程主要用线程池(ThreadPool)来管理(这里的TheadPool是一个概念)。
ThreadPool和Task
这里的ThreadPool和Task都是微软实现的线程池的的封装的操作类。
.Net线程池第一代实现类ThreadPool
ThreadPool类实现方式是有一个全局的集合用来存放所有的待执行的线程。所有的CPU从这个队列面搭载待运行的线程来执行,因为用的是全局的队列,所有多核的情况下存在并发。
所以加了同步锁。而且这个集合采用的是先进先出的方式(队列)。
.Net线程池第二代实现类Task
Task类实现方式是在每一个核上创建自己的集合。任务来了就根据负载分配到各自集合里。但是集合这个采用的是先进后出的方式(栈).因为每个核只管自己的队列所有就少了同步锁的问题。这样就提高了执行效率。而且如果某一个核的队列里面暂时没有需要被执行的任务。还可以从其他的正在忙核的队列里把他的任务拿过来自己做。(个人觉得应该是从尾部拿,如果从头部拿的话就又有同步的问题了。所以这也是采用栈的好处)。
而Async 和 await
这2个关键字就是其实就是方便写异步操作的。
Async表示这是一个异步方法。这个一部方法直接调用的话就是交由后台线程池去管理。所以他返回的值是一个Task。
由于是线程池管理所以是后台线程。经常我们在同步调用Async的方法的时候就要加wait 关键字。否则我们主线程执行完了。后台线程有没有执行完,程序都结束了。
wait和await
wait是等待一个任务的结果,等到了再往下走。这里会堵塞当前线程,必须等到结果以后才往下走
await也是等待一个任务的结果,但是不堵塞当前线程。直到需要用到这个任务的结果了。才不得不等待。
所以await也只会出现在Async的方法中,因为只有异步的方法才存在这种情况。
但是要注意异步和多线程 这是2个不同概念。
因为即使是单线程也是可以异步的(比如javascript就是单线程,但是他也可以通过Ajax异步,Redis也是)。
所以虽然这里的Async方法叫异步方法而且一定是和多线程分不开的(因为他牵涉到task等等)
但要明白这里只是把异步和多线程联合在一起使用罢了。
Thread,ThreadPool,Task的更多相关文章
- 从Thread,ThreadPool,Task, 到async await 的基本使用方法解读
记得很久以前的一个面试场景: 面试官:说说你对JavaScript闭包的理解吧? 我:嗯,平时都是前端工程师在写JS,我们一般只管写后端代码. 面试官:你是后端程序员啊,好吧,那问问你多线程编程的问题 ...
- c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习
c#中@标志的作用 参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...
- Thread,ThreadPool,Task, 到async await 的基本使用方法和理解
很久以前的一个面试场景: 面试官:说说你对JavaScript闭包的理解吧? 我:嗯,平时都是前端工程师在写JS,我们一般只管写后端代码. 面试官:你是后端程序员啊,好吧,那问问你多线程编程的问题吧. ...
- 异步多线程 Thread ThreadPool Task
一.线程 Thread ThreadPool 线程是Windows任务调度的最小单位,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以 ...
- .net 多线程 Thread ThreadPool Task
先准备一个耗时方法 /// <summary>/// 耗时方法/// </summary>/// <param name="name">< ...
- 浅析C#中的Thread ThreadPool Task和async/await
.net 项目中不可避免地要与线程打交道,目的都是实现异步.并发.从最开始的new Thread()入门,到后来的Task.Run(),如今在使用async/await的时候却有很多疑问. 先来看一段 ...
- 异步和多线程,委托异步调用,Thread,ThreadPool,Task,Parallel,CancellationTokenSource
1 进程-线程-多线程,同步和异步2 异步使用和回调3 异步参数4 异步等待5 异步返回值 5 多线程的特点:不卡主线程.速度快.无序性7 thread:线程等待,回调,前台线程/后台线程, 8 th ...
- .NET多线程(Thread,ThreadPool,Task,Async与Await)
.NET多线程是什么? 进程与线程 进程是一种正在执行的程序. 线程是程序中的一个执行流. 多线程是指一个程序中可以同时运行多个不同的线程来执行不同的任务. .NET中的线程 Thread是创建和控制 ...
- C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!
说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部 ...
随机推荐
- OO电梯调度
告别了三次奇妙无比的求导作业之后,我们就开始搭建一部自己的电梯了.相信我们不同同学的电梯运行方式肯定各具特色吧,但值得肯定的是,在艰苦的走完了三次电梯逐步改进的作业之后,我们的电梯在正常情况下应该是可 ...
- linux卸载erlang
rpm -qa | grep erlang | xargs rpm -e --nodeps
- j2EE基础知识
感觉应付面试足够了 一.基本概念 1.1 WEB开发的相关知识 WEB用于表示Internet主机上供外界访问的资源. Intrenet上供外界访问Web资源分为 静态web资源:web页面中供人们浏 ...
- OOP的五大原则
一:单一职责原则. 含义一方面是避免相同的职责分散到不同的类中:另一方面避免一个类承担太多职责. 二:接口隔离原则. 一个类对另一个类的依赖性应当建立在最小的接口上的. 就是定制化服务设计的原则. 三 ...
- [Solution] 969. Pancake Sorting
Difficulty: Medium Problem Given an array A, we can perform a pancake flip: We choose some positive ...
- java中null是什么,以及使用中要注意的事项
1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...
- 移动端rem适配
(function(_D) { var _self = {}; _self.resizeEvt = 'orientationchange' in window ? 'orientationchange ...
- Java I/O (1) - 输入/输出流
先说概念: Java API中,可以从其中读入一个字节序列的对象叫做输入流,可以向其中写入一个字节序列的对象叫做输出流.这些字节序列的来源地 和 目的地 可以文件.网络连接甚至内存块.抽象类Input ...
- AD16PCB如何快速删除走线
工具(Tools)取消布线(Un_Route)全部(AII) ad pcb画图,如果想整体去掉一条线,只要是连接在一起的,不管在哪一层,都可以采取如下方法:1.PCB画面下,按组合键Ctrl+H,会出 ...
- PHP+Mysql 实现数据库增删改查(原生)
Mysql数据库创建 创建一个新闻列表的数据库: 1. 查询数据库 1.1. 创建文件dbconfig.php,保存常量 <?php define("HOST"," ...