多线程篇

转自:https://www.cnblogs.com/yaopengfei/p/8059383.html

@多线程篇

一. 背景

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

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

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

(一). 时间上:

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

②:时间片切换,cpu默认最大支持8线程,但你开启了9个线程,必然有一个线程会休眠。

(二). 空间上:

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

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

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

二. 概念的梳理

1. 进程、线程和多线程

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

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

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

2. 多线程的好处和弊端

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

弊端:

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

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

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

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

3. 何时建议使用多线程

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

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

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

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

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

5. 同步方法和异步方法

①同步方法:方法从上而下一次执行,一步一步执行,有先后顺序。
在这里插入图片描述

②异步方法:说白了,就是里面有开启了多个线程,主线程单独执行。
在这里插入图片描述

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

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

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

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

转自:https://www.cnblogs.com/yaopengfei/p/8059383.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值