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);

  

最新文章

  1. 系统升级日记(2)- 升级到SharePoint Server 2013
  2. D类 E类地址
  3. javascript exec方法
  4. 支持IE6以上阴影效果纯CSS
  5. 谈谈javascript的函数表达式及其应用
  6. 小机器人自动回复(python,可扩展开发微信公众号的小机器人)
  7. 【ALB技术笔记】基于多线程方式的串行通信接口数据接收案例
  8. ●BZOJ 1934 [Shoi2007]Vote 善意的投票
  9. vue路由嵌套,vue動態路由
  10. mysql视图的作用
  11. L314 单音节词读音规则(二)-元音字母发音规则
  12. Invocation of init method failed; nested exception is java.text.ParseException: '?' can only be specfied for Day-of-Month or Day-of-Week.
  13. oracle 按条件删除、查询表
  14. 【DS】排序算法之希尔排序(Shell Sort)
  15. HappyJTAG2 - JTAG AND SPI AVR8 interface EMBEDDED JTAG ! EMBEDDED SPI !
  16. 《大话设计模式》C#/C++版pdf/源码下载
  17. Python中的str与bytes之间的转换的三种方法
  18. leancloud js SDK 学习
  19. CentOS 6.2配置本地yum源
  20. JavaWeb之JSP入门

热门文章

  1. HDU 1002 A + B Problem II(AC代码)
  2. Python漫谈-比较运算符和类的神奇方法
  3. css中解决img在a元素中使得a元素撑大写法
  4. Ubuntu 改变workspace布局
  5. Vimium 快捷键记录
  6. c#部分---结构体再利用;
  7. 最长不下降子序列的O(n^2)算法和O(nlogn)算法
  8. Nginx安全配置研究
  9. linux nginx 配置ssl证书访问
  10. SET ROWCOUNT,SET NOCOUNT