一 使用线程的理由

1.可响应性(通常是对于客户端GUI应用程序);
2.性能,多个CPU(或多核CPU)能并发执行多个线程,同时执行多个操作能提升性能.

二 线程开销

线程有空间(内存耗用)和时间(运行时的执行性能)上的开销.
1.创建线程,让线程进驻系统以及最后销毁线程需要空间和时间的消耗;
2.系统进行上下文切换,选择要执行的线程,CPU执行所选的线程,该线程只能在一个"时间片"里去执行线程操作,
实际上,上下文切换对性能影响很大.

三 线程调度和优先级

1.每个线程都分配了0(最低)到31(最高)的优先级,系统上下文切换调度优先级较高的线程;
2.较高优先级的线程调度完毕后,较低优先级的线程才可以得到调度.
3.较高优先级的线程总是抢占较低优先级的线程,较低优先级的线程在运行时,如果有一个较高优先级
的线程准备好运行,系统会立即挂起较低优先级的线程(即时较低优先级线程的时间片还没用完),将CPU分配
给较高优先级的线程(抢占式).

四 前台线程和后台线程

CLR将每个线程要么视为前台线程,要么视为后台线程,
一个进程的所有前台线程停止运行时,CLR强制终止仍在运行的任何后台线程

相关代码:

static void Main(string[] args)
{
//创建新线程,默认为前台线程
Thread t = new Thread(DoSomething); //设置线程为后台线程
t.IsBackground = true; //启动线程
t.Start(); Console.WriteLine("主线程执行完毕"); return;
} static void DoSomething()
{
Thread.Sleep(5000);
Console.WriteLine("新线程执行完毕");
}

如果新线程是以默认的前台线程运行(IsBackground = false),运行结果为: 输出"主线程执行完毕"  ->  5秒后输出"新线程执行完毕"  -> 程序退出.

如果新线程是以后台线程的形式运行(IsBackground = true),  运行结果为: 输出"主线程执行完毕"  ->  程序退出.  

(CLR via C#学习笔记)线程基础的更多相关文章

  1. Clr Via C#读书笔记---线程基础

    趣闻:我是一个线程:http://kb.cnblogs.com/page/542462/ 进程与线程 进程:应用程序的一个实例使用的资源的集合.每个进程都被赋予了一个虚拟地址空间. 线程:对CPU进行 ...

  2. .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)

    原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...

  3. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  4. mybatis学习笔记之基础复习(3)

    mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...

  5. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  6. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  7. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  8. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  9. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111

    基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...

随机推荐

  1. 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换

    转:http://blog.csdn.net/q445697127/article/details/40537945 /** * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换 ...

  2. 170721、springboot编程之注解(annotation)列表

    (1)@SpringBootApplication 申明让spring boot自动给程序进行必要的配置,这个配置等同于: @Configuration ,@EnableAutoConfigurati ...

  3. CH1401 兔子与兔子【字符串】【HASH】

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

  4. 当url作为id时的删除

    API Documentation — Elasticsearch 6.3.1 documentation https://elasticsearch-py.readthedocs.io/en/mas ...

  5. Kafka Producer接口

    参考, https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example http://kafka.apache.org ...

  6. Ubuntu安装pycurl

    转自:https://blog.csdn.net/qq_23729557/article/details/78836547 在Ubuntu 16.04上安装pycurl时大致会遇到一下两个问题: 在使 ...

  7. inotify+rsync安装配置

    环境 系统 IP地址 主服务器 CentOS7.4 192.168.1.1 备份服务器 CentOS7.4 192.168.1.2 一.备份服务器 安装rsync(备) wget https://rs ...

  8. 在Silverlight 5 项目中创建单元测试项目

    下载安装Silverlight ToolKit:测试框架程序集路径:C:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec ...

  9. python操作mysql数据库读取一个数据库的表写入另一个数据库

    写这个肯定是工作需要了,不啰嗦,直接说事 我现在有两台主机,一台是公司主机,一台是客户主机,要求把公司主机上的三个表同步到客户主机上的数据库 注意是同步,首先就得考虑用linux定时任务或者主从复制, ...

  10. AE Scene开发中的观察者模式

    AE SceneGraph中的观察者模式 注意SceneControl不是观察者,它只是一个SceneGraph的拥有者:SceneViewer才是观察者,SceneGraph是被观察对象,同时观察者 ...