隆昌网站建设小程序哪家公司代理
news/
2025/10/4 10:29:43/
文章来源:
隆昌网站建设,小程序哪家公司代理,快速建设网站工具,淮南做网站一. 背景 在刚接触开发的头几年里#xff0c;说实话#xff0c;根本不考虑多线程的这个问题#xff0c;貌似那时候脑子里也有没有多线程的这个概念#xff0c;所有的业务都是一个线程来处理#xff0c;不考虑性能问题#xff0c;当然也没有考虑多线程操作一条记录存在的并…一. 背景 在刚接触开发的头几年里说实话根本不考虑多线程的这个问题貌似那时候脑子里也有没有多线程的这个概念所有的业务都是一个线程来处理不考虑性能问题当然也没有考虑多线程操作一条记录存在的并发问题后面随着处理的系统业务越来越复杂多线程再也回避不了了也就借此机会深入研究了一下.Net中的多线程的处理方案。 发现在.Net领域中多线程的处理大致经历了这么几个阶段Thread→ThreadPool→委托的异步调用→Task→TaskFactory→Parallerl→异步编程模型(async和await)。 关注我博客的人会发现早在2017年6月份的时候就开始整理多线程问题了大约用了6篇文章的来介绍了.Net中的线程的使用方法主要是介绍相应类的实例方法的使用有点帮助文档的意思了哦最近多线程使用的相当频繁借此机会重新结合一些实际业务系统介绍一下.Net领域的多线程问题本次将整合原先的六篇文章(删除或覆盖更新)。 本质 充分发掘CPU的性能把一些并没有先后强依赖关系、且耗时代码块放到一个新的线程里去处理那么原先按顺序执行的业务就会变成并行执行让主线程继续往后执行节约了时间了提高了效率。 下面补充一下多线程在时间和空间上的开销
(一). 时间上
①开启或销毁一个线程都会通知进出中的dll程序集让这些dll进行相应的操作。
②时间片切换4个逻辑处理器(不考虑Inter的超线程技术一核对多个线程)同时并行只能处理4个线程多余的休眠很多时候我们看似很多线程在并行执行实际上是间歇性的串行。
《关于这个说法有异议的话请留下您的见解欢迎讨论请勿谩骂》
(二). 空间上
①用户模式堆栈一个线程分配1M的堆栈空间。
②内核模式的堆栈用户模式的参数需要传递到内核模式。
③线程的内核数据结构会存放一下变量。 二. 概念的梳理 1. 进程、线程和多线程 进程当一个程序开始运行时它就是一个进程或者多个eg游戏进程包括运行中的程序和程序所使用到的内存和系统资源而一个进程又是由多个线程组成。 线程线程是程序中的一个执行流每个线程都有自己的专有寄存器(栈指针、程序计数器等)但代码区是共享的即不同的线程可以执行同样的函数。 多线程多线程是指程序中包含多个执行流即在一个程序中可以同时运行多个不同的线程来执行不同的任务也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
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 ab} 调用 Add1,2; $(#div1).html(); 这两行代码Add方法就属于同步方法所以必须等5s后Add方法执行完才能执行下面清空div1内容的操作。 总结同步方法和异步方法的区别就是是否需要等待返回结果才能执行后续操作。 6. 异步多线程的三个特点 ①同步方法卡界面原因是主线程被占用开启新线程去异步调用不卡界面原因是计算交给了别的线程主线程空闲. ②同步方法慢原因是只有一个线程计算开启新线程去异步调用快原因是多个线程同时计算但是更消耗资源不宜太多. ②异步多线程是无序的启动顺序不确定、执行时间不确定、结束时间不确定. 三. 系列章节 第一节复习委托并且通过委托的异步调用开启一个新线程和异步回调、异步等待。 第二节深入剖析Thread的五大方法、数据槽、内存栅栏。 第三节ThreadPool的线程开启、线程等待、线程池的设置、定时功能。 第四节Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案。 第五节Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。 第六节深入研究Task实例方法ContinueWith的参数TaskContinuationOptions。 第七节利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。 第八节Task的各类TaskTResult返回值以及通用线程的异常处理方案。 第九节深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke和几大编程模型(SPM、APM、EAP、TAP 第十节利用async和await简化异步编程模式的几种写法 第十一节深究用户模式锁的使用场景(异变结构、互锁、旋转锁) 第十二节深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁) 第十三节实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim) 第十四节: 介绍四大并发集合类并结合单例模式下的队列来说明线程安全和非安全的场景及补充性能调优问题。 第十五节深入理解async和await的作用及各种适用场景和用法 第十六节 第十七节
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927021.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!