到底为何《芈月传》赢了话题却输了质量?

小说:到底为何《芈月传》赢了话题却输了质量?作者:成杜密更新时间:2019-05-24字数:38321

“未免有所损伤,这一次所用兵器统一为木质弯刀。”一队侍卫走出,抱着大把木刀放在谷口前平台之上。

写意音乐剧 - 黄胤然首倡音乐剧新概念

以谷寿夫看来,只要中华门拿下来,那附近的雨花台阵地上的中国军队就失去了左翼的支撑,再加上雨花台的外围阵地均已经落入皇军之手,再猛攻一两次,估计能够在天黑之前拿下雨花台阵地,从而攻破南京城南的中国军防御!
他大吼一声,拔出寒光闪闪的横刀,劈头就是一刀,刀势迅疾无比,但都罗仙已经有了警惕,急闪身,躲过必死的一刀,他还是慢了一步,锋利的刀砍在他左臂上,‘咔嚓!’一声,都罗仙的胳膊被一刀砍断,他惨叫一声,夹马便逃。

李庆安把赏了腊梅片刻,又继续向前走,穿过一丛翠竹,眼前豁然开朗,这里竟是一片小小的娱乐场地,地面平整,周围被花丛和翠竹包围,约有三四亩地见宽。场地里有几架秋千,一座小型的单人鞠球门,更妙的是还有两只金壶,旁边还放着一副投掷金壶的专用箭架,里面有十几支金壶箭。

一. 背景

   在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并发问题,后面随着处理的系统业务越来越复杂,多线程再也回避不了了,也就借此机会深入研究了一下.Net中的多线程的处理方案。

  发现在.Net领域领域中,多线程的处理大致经历了这么几个阶段:Thread→ThreadPool→委托的异步调用→Task→TaskFactory→Parallerl→异步编程模型(async和await)。

  关注我博客的人会发现,早在2017年6月份的时候,就开始整理多线程问题了,大约用了6篇文章的来介绍了.Net中的线程的使用方法,主要是介绍相应类的实例方法的使用,有点帮助文档的意思了哦,最近多线程使用的相当频繁,借此机会重新结合一些实际业务系统介绍一下.Net领域的多线程问题,本次将整合原先的六篇文章(删除或覆盖更新)。

PS: 多线程的本质是牺牲空间来换取时间,在同步方法中,逻辑代码需要从上往下按顺序执行代码块,在很多情况下代码块与代码块之间并没有先后依赖关系,而前面的代码块非常耗时,在单线程下,后面的代码块必须等待前面的代码块执行完毕才能执行,在这种情况下,我们开辟出一个新线程去异步执行前面的耗时代码块,而主线程继续往后执行,提高了执行效率,这就是牺牲了空间换取了时间(现在的cpu都是2核4线程、4核心8线程,完全有能力处理多个线程)。

下面补充一下多线程在时间和空间上的开销:

(一). 时间上:

①:开启或销毁一个线程都会通知进出中的dll程序集,让这些dll进行相应的操作。

②:时间片切换,cpu默认最大支持8线程,但你开启了9个线程,必然有一个线程会休眠。(不准确,后面修正)

(二). 空间上:

①:用户模式堆栈,一个线程分配1M的堆栈空间。

②:内核模式的堆栈,用户模式的参数需要传递到内核模式。

③:线程的内核数据结构,会存放一下变量。

 

二. 概念的梳理

 1. 进程、线程和多线程

  进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,而一个进程又是由多个线程组成。

  线程:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

  多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

2. 多线程的好处和弊端

  好处:可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。(牺牲空间资源,来换取时间)

  弊端:

  ①:线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;(占内存多)

  ②:多线程需要协调和管理,所以需要CPU时间跟踪线程; (占cpu多)

  ③:线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;(多线程存在资源共享问题)

  ④:线程太多会导致控制太复杂,最终可能造成很多Bug。(管理麻烦,产生意外bug)

3. 何时建议使用多线程

  ①. 当主线程试图执行冗长的操作,但系统会卡界面,体验非常不好,这时候可以开辟一个新线程,来处理这项冗长的工作。

  ②. 当请求别的数据库服务器、业务服务器等,可以开辟一个新线程,让主线程继续干别的事。

  ③. 利用多线程拆分复杂运算,提高计算速度。

4. 何时不建议使用多线程

  当单线程能很好解决,就不要为了使用多线程而用多线程。

5. 同步调用和异步调用

  ①单线程同步调用:方法从上而下一次执行,一步一步执行,有先后顺序。

           

  ②异步调用(区别于异步方法):开启新的线程去执行业务,主线程单独执行,可以选择是否等待子线程执行完后再执行

    

同步方法 VS 异步方法: 

  1. 一个误区:异步方法指的是一些特有的方法(并不开启新线程),它和开启一个新的线程比如“很多情况下我们会说,开启一个新的线程去异步调用”,这不是一回事,典型的异步方法,比如js 的ajax请求。

  2. 同步方法:我们平时封装的一些普通方法大多数都是同步方法,同步方法典型的特点:就是在没有得到方法的返回值或者该方法没有执行完,该调用就需要在这等待,不能继续执行。

  3. 异步方法:异步方法在调用后,调用这在没有得到返回结果前,就可以继续执行后续业务,异步方法通常是通过通知、回调的方式告诉调用者,无须消耗过多的性能。

举例1:

  $.Post("url",{},function(data){     });

  $("#div1").html("");

这两行代码,第一行发送异步请求的时候,即使得到回调返回值,下面清空div1内容的操作同样也将执行,Post就是异步方法。

举例2:

  先封装1个方法: function  Add(a,b){  先休眠5s;   return a+b}

  调用:

  Add(1,2);

  $("#div1").html("");

这两行代码,Add方法就属于同步方法,所以必须等5s后,Add方法执行完,才能执行下面清空div1内容的操作。

  总结:同步方法和异步方法的区别就是:是否需要等待返回结果,才能执行后续操作。

  

6. 异步多线程的三个特点

  ①:同步方法卡界面,原因是主线程被占用;开启新线程去异步调用不卡界面,原因是计算交给了别的线程,主线程空闲.

  ②:同步方法慢,原因是只有一个线程计算;开启新线程去异步调用快,原因是多个线程同时计算,但是更消耗资源,不宜太多.

  ②:异步多线程是无序的,启动顺序不确定、执行时间不确定、结束时间不确定.

 

三. 系列章节

   第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待。

   第二节:深入剖析Thread的五大方法、数据槽、内存栅栏。

   第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能。

   第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案。

   第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。

   第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions。

   第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。

   第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。

   第九节:深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)

   第十节:利用async和await简化异步编程模式的几种写法

   第十一节:深究用户模式锁的使用场景(异变结构、互锁、旋转锁)

   第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)

   第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)

   第十四节: 介绍四大并发集合类并结合单例模式下的队列来说明线程安全和非安全的场景及补充性能调优问题。

   第十五节:

   第十六节:

   第十七节:

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,如需代码请留下你的评论,加我QQ:604649488 (备注:评论的博客名)
 

 

编辑:海石平

发布:2019-05-24 00:11:57

当前文章:http://adsl66.com/news/20190274716.html

防雾霾12招!为了咱可以活久点,可得好好看看! 2011再谈择校:续说海淀区民族小学 《魔兽》在中国的火爆,说明了什么? 吃饭太晚有7大危险? 漫谈儿童的不适应行为及治疗 学习能力个案:1年级 淘气包大变身! 如何向心爱之人表白 我和老公情感上密不可分,肉体上却麻木不仁

43584 15772 69313 44211 23008 41541 23901 66229 70858 51515 97728 22494 93137 94737 83073 10733 91999 38207 30720 30472

我要说两句: (0人参与)

发布