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#学习笔记的更多相关文章

  1. 《Java多线程编程核心技术》学习笔记

    第2章 对象及变量的并发访问 2.1 synchronized同步方法 方法内的变量为线程安全: 方法内部的变量是线程私有的 方法中有一个变量num,后面对它赋值 两个线程同时调用这个方法,对其赋不同 ...

  2. android 多线程 异步消息处理 服务 学习笔记 (六)

    三种多线程编程方法 1 class Mythread extends Thread{ @Override public void run(){} } new Mythread().start() 2 ...

  3. java 多线程——并发编程模型 学习笔记

                                                                                                 并发编程模型 ...

  4. Java多线程技术学习笔记(一)

    目录: 概述 多线程的好处与弊端 JVM中的多线程解析 多线程的创建方式之一:继承Thread类 线程的状态 多线程创建的方式之二:实现Runnable接口 使用方式二创建多线程的好处 多线程示例 线 ...

  5. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  6. 转:学习笔记:delphi多线程学识

    学习笔记:delphi多线程知识 最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处 ...

  7. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  8. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  9. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

随机推荐

  1. 用jquery将复选框改成单选框

    前提是要包含jquery文件. 相关代码: jQuery(function($) { init_price_checkbox("by_price"); init_price_che ...

  2. java 读取XML文件作为配置文件

    首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

  3. C# 读取文本文档(转)

    1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = ...

  4. cuffdiff 和 edgeR 对差异表达基因的描述

    ASE又走到了关键的一步  要生成能决定是否有差异表达的table. 准备借鉴一下cuffdiff和edgeR 的结果 cuffdiff对差异表达基因的描述: 一共十四列: 第一列, test_id ...

  5. 深度学习研究理解5:Visualizing and Understanding Convolutional Networks(转)

    Visualizing and understandingConvolutional Networks 本文是Matthew D.Zeiler 和Rob Fergus于(纽约大学)13年撰写的论文,主 ...

  6. 一个方法中的ajax在success中renturn一个值,但是方法的返回值是undefind?

    https://segmentfault.com/q/1010000003762379 A页面 console.log(handleData("search_list", &quo ...

  7. hiho一下116周 网络流

    网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...

  8. phpwind8.7升级9.0.1过程(四)20130207升级到20141228

    每一次升级前都要注意备份 1.网站根目录的所有文件 2.网站的数据库 根据phpwind官方教程 更新到20130702版本成功并备份 更新到20140428版本成功并备份 20141228版本的更新 ...

  9. Android—进度条

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  10. java基础之:匿名内部类应用例子一

    一:接口 package com.yeepay.sxf.testclassforinner; /** * 回调接口. * @author shangxiaofei * */ public interf ...