ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—1-线程机制
来源:互联网 发布:kc免费网络电话软件 编辑:程序博客网 时间:2024/05/16 07:07
线程是程序执行的基本原子单位,我们上学的时候学过一个分子包括无数个原子,而原子是不能在分割的,原子是最小的单位,一个进程可以由多个线程来组成,解放战争中有好多战役比如淮海战役,淮海战役中有很多小的战斗组成的,我们可以把战役看做进程,而战役中很多小的战斗看做线程,从这个角度来看,为什么会提高效率呢,把一个进程分成好多线程,把一个战役分成好多小的战斗来组成,让它们并发异步执行来提高运行的效率,同时两个战斗同时打响,并发执行并不是同时执行(占用CPU),因为CPU某个时间段只能运行一个程序的,就是说海海战役有一个总的指挥司令部,这个总的指挥司令部在一个时间段上只能指挥一场战斗的,当同时两个战斗开始的时候,在某个时间点上只能指挥一场战斗,但是可以交叉指挥,所以从表面上看这两场战斗是同时打响的,也就是说,一个时间点只能一个线程占用CPU,只不过它们争夺CPU(相当于交叉指挥),感觉像同时运行一样。
进程举例
假设现在有个任务,一个是任务一炸掉敌人的炮兵营,分为三个步骤的战斗才能完成A1:找到炮兵营地图,B1:潜伏至敌人营地,C1:炸掉炮兵营,任务二是端掉敌人的高地,也分为三个步骤的战斗才能完成A2:找到高地死角,B2:阻击手潜伏至敌人高地死角,C2:阻击敌人。假设每一个步骤需要10分钟。
如果同步执行的话
假设这第一个任务和第二个任务都要用到机关枪,那么当任务一执行的时候,第二个任务需要等待,因为需要用到机关枪,没机关枪完成不了的,那么这两个任务必须得一个等待了,交给我机关枪我才能进行,两个任务共需要1个小时,因为它们需要的是一个资源。
如果异步执行的话
假设这第一个任务和第二个任务各自要用到不同的工具,那么它们不需要彼此的等待,并发执行,只需要30分钟就能完成。
所以很明显第二种异步执行效率更高一些。
什么时候用线程?
假设两个任务都要用到一个资源,比如都要访问文件,IO输出,就不要用异步线程执行了,因为它们会同时抢占IO资源,会导致整个程序的效率会降低,它们在并发执行的时候会同时争夺某个资源比如说CPU,在这种情况下,CPU要不断的执行一些算法到底哪个线程的优先级高会消耗时间的,但是如果使用的资源比较均匀的,一个是使用IO输出,一个没有使用IO,就可以使用异步并发执行了,就是同时执行。
如果两个任务用到的不是一个资源,可以用异步线程执行。
我们一边下载文件,一边听音乐看似同时执行,但是实际上一个时间点上CPU只能运行一个任务,但是在大的时间段内看似同时运行一样。
使用线程的缺点
1:因为要保存每一个线程的上下文信息会使用到内存,会受到内存限制的问题
2:跟踪大量的线程将占用大量的处理器时间
- ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—1-线程机制
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—多线程查询数据库记录
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程临界区(八)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)
- ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—.NET下的多线程编程2.1-Thread类的使用
- ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—.NET下的多线程编程2.2-Thread中利用构造函数传递参数
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程委托使用的实例(五)
- ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程利用thread.Start()传递参数(四)
- ASP.NET温故而知新学习系列之ASP.NET中的状态—基于服务器端的状态管理Session(二)
- ASP.NET温故而知新学习系列之ASP.NET中的状态—2-基于服务器端的状态管理Session
- ASP.NET温故而知新学习系列之ASP.NET中的状态—基于服务器端的状态管理Session(二)
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—HttpModule(二)
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—HttpHandler(三)
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—ASP.NET请求的处理过程(一)
- ASP.NET温故而知新学习系列之网站安全技术—预防脚本攻击(二)
- ASP.NET温故而知新学习系列之网站安全技术—Web.config加密和解密(一)
- ASP.NET温故而知新学习系列之加密解密技术—对称算法加密(一)
- ASP.NET温故而知新学习系列之网站安全技术—加强页面间传值的安全性Convert.ToBase64String(三)
- linux学习笔记
- linux 双网卡绑定(bonding)实现负载均衡或故障转移
- ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—HttpHandler(三)
- 使用CCRibbon画线
- 第5章 加密与认证技术
- ASP.NET温故而知新学习系列之ASP.NET中的多线程编程—1-线程机制
- Tomcat admin模块的配置
- Oracle执行计划详解
- 2012年工作计划
- java serializable
- 浅谈java中的volatile
- 菜鸟必备:个人电脑端口完全解析
- EXIF格式定义
- view实现涂鸦功能