多线程要点--CLR C#学习笔记
1、windows永远不会调度一个进程,只调度线程。
2、线程和操作系统的关系:CLR(X)--AppDomain--线程池(包含工作者线程和I/O线程)
3、线程的关键组成部分
A、线程执行上下文
占用的空间:
o x86->700字节内存
x64->1240字节内存
o IA64->2500字节内存
B、线程环境块(用户模式下应用程序能快速访问的地址空间),占用空间为1个内存页,在x86和x64系统中卫4KB,在IA64系统下为8KB。
C、用户模式栈,占用1MB内存空间。
D、内核模式栈,32位系统为12KB,64位系统为24KB内存。
4、windows桌面型系统的上下文切换时间为30毫秒左右(以windows7为例的理论时间)。
5、尽量减少线程数量的理由:
- 上线文切换的30毫秒时间开销
- 执行垃圾回收时,CLR会暂停、遍历所有线程。
- 线程越多,调试、跟踪程序的工作就会变的越困难。
- CPU对多线程的数量支持是有限的。
6、线程的优先级=进程优先级+线程优先级
优先级从低到高的顺序为:Idle,BelowNormal,Normal,Abore Normal,High,Realtime
7、特别提示:windows桌面和server操作系统不是实时的操作系统,不能保证线程的实时性。
8、针对线程执行上下文的编程:
- 阻止上下文流可以提高城乡的性能,尤其针对运行于服务器上应用程序。
o CallContext.LogicalSetData("Name","xx");
o ExecutionContext.SuppressFlow();//阻止上下文流动
o ExecutionContext.RestoreFlow();//恢复上下文流动
9、和线程相关的委托和回掉函数:
WaitCallback委托--------------------ThreadPool.QueueUserWorkItem()
TimerCallback委托-------------------System.Threading.Timer
ParameterizedThreadStart委托------System.Threading.Thread
回调分类:
A、普通不可取消回调
B、可取消的回调:
CancellationTokenSource CTS= new...
ThreadPool.QueueUserWorkItem(0=>Count(CTS.Token,1000));
Void Count(CancellationToken token,Int32 CountTo)
{
for....
If(token.IsCancellationRquested)
{
...
}
}
关联取消标记:
CancellationTokenSource.CreateLinedTokenSource(CTS1.Token,CTS2.Token);
10、使用专用线程的理由(System.Threading.Thread):一个需要长时间运行的任务。
11、ThreadPool的缺点:
- 无法跟踪操作的状态(回调函数内容);
- 无法获取操作的返回值(回调函数结果);
采用任务Task可以解决这两个问题
12、Parallel循环,并行循环静态方法,Parallel.For/ForEach
- 任何一次都会使整个循环集合终止,但是由于循环集合时分块并行执行,所以不会立刻得到终止。
- 不要为执行很快的操作使用Parallel循环。
13、Parallel.Invoke(()=>StaticFounction1(),()=>StaticFounction2);
多线程要点--CLR C#学习笔记的更多相关文章
- 《Java多线程编程核心技术》学习笔记
第2章 对象及变量的并发访问 2.1 synchronized同步方法 方法内的变量为线程安全: 方法内部的变量是线程私有的 方法中有一个变量num,后面对它赋值 两个线程同时调用这个方法,对其赋不同 ...
- android 多线程 异步消息处理 服务 学习笔记 (六)
三种多线程编程方法 1 class Mythread extends Thread{ @Override public void run(){} } new Mythread().start() 2 ...
- java 多线程——并发编程模型 学习笔记
并发编程模型 ...
- Java多线程技术学习笔记(一)
目录: 概述 多线程的好处与弊端 JVM中的多线程解析 多线程的创建方式之一:继承Thread类 线程的状态 多线程创建的方式之二:实现Runnable接口 使用方式二创建多线程的好处 多线程示例 线 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 转:学习笔记:delphi多线程学识
学习笔记:delphi多线程知识 最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处 ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- Java多线程技术学习笔记(二)
目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...
随机推荐
- Hex Editor实现Notepad++16进制编辑功能
把HexEditor.dll文件复制到安装目录(如C:\Program Files\Notepad++\plugins),退出NotePad++重新打开即可!需要以十六进制显示时,点击菜单的:[插件] ...
- Java BigInteger(大数,ACM比赛专用)
用c或者C++处理大数比较麻烦,于是决心学习一下JAVA中大数运算. 先下载一个eclipse,具体的用法去问度娘吧 JAVA中有两个类BigInteger和BigDecimal分别表示大整数类和大浮 ...
- ZOJ 3872--解题报告
题目相关: 3872相关链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5520 Edward拥有一组数列. 其定义了Be ...
- php 函数ignore_user_abort()
ignore_user_abort() 设置与客户机断开是否会终止脚本的执行. 工作中看到这样一个类似的方法,查资料理解了一下: 一个的ignore_user_abort()的例子,配合set_ti ...
- C++之STL之string
/*C 语言中字符数组一般会采用char str[]来存放,但是显得会比较麻烦,C++在stl中加入了string类型,对字符串常用的功能进行了封装,操作起来比较方便*/#include<cst ...
- 关押罪犯(2010年NOIP全国联赛提高组)
题目描述 Description S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极 不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用&qu ...
- JS的prototype的共享机制分析
function Super(){ } Super.prototype.aaa=[1,2,3]; Super.prototype.bbb=1; function Sub(){ Super.call(t ...
- knockoutjs foreach array绑定 表格 下拉框绑定
转载http://desert3.iteye.com/blog/1480471 knockoutjs foreach array绑定 表格 下拉框绑定 博客分类: Javascript 动态表格使 ...
- 软件推荐 - Source Insight
一直以来从事的开发工作,涉及的范围很杂,乱七八糟的都有,其中有一项占据了比较长的时间,那就是固件程序的开发,不涉及操作系统,也就是一般意义上大家所说的裸跑程序.用过的芯片杂七杂八,比较主要的有Ate ...
- (转) TensorFlow深度学习,一篇文章就够了
TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6 原文出处: 我爱计算机 (@tobe迪豪 ) 作者: 陈迪 ...