(CLR via C#学习笔记)线程基础
一 使用线程的理由
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#学习笔记)线程基础的更多相关文章
- Clr Via C#读书笔记---线程基础
趣闻:我是一个线程:http://kb.cnblogs.com/page/542462/ 进程与线程 进程:应用程序的一个实例使用的资源的集合.每个进程都被赋予了一个虚拟地址空间. 线程:对CPU进行 ...
- .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)
原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- mybatis学习笔记之基础复习(3)
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...
- Java学习笔记之---基础语法
Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- Java后端高频知识点学习笔记1---Java基础
Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
随机推荐
- Android DatepickerDialog(日期选择器)的使用
效果图如下: 日期和时间选择对话框,首先是要获得当前时间,这里用 java类中的Calendar来获得日期和时间(也可以用Date,但是不提倡,Date部分方法已经注释为过时), Calendar是一 ...
- Python 自学积累(二)
1. onfigParser 模块用于操作配置文件 注:Parser汉译为“解析”之意. 配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数( ...
- [NGINX] - 配置文件优化 - NGINX.CONF
Nginx 本文主要针对公司的Nginx负载均衡配置进行解释,配置文件在最下方.因为公司没有使用PHP,所以NGINX里面并没有太多facgi模块相关优化 NGINX.CONF user 语 ...
- VirtualBox vbox not found
VirtualBox vbox file not found Problem When I opened virtualbox, Today, it showed "inaccessible ...
- Asp.NET 与 WebApi 共享Session
首先新建一个.net framework 4.5.2的 web应用程序,选择WebApi基架,包括MVC与Webapi 1.在global.asax中启用Session 2.在HomeControll ...
- Django - 模型层 - 下
一.多表 sql 单表 多表 多对一 多对多 一对一 =============================================== 一对多:Book id title price p ...
- s3对象存储
bkstorages 模块帮助你在蓝鲸应用中使用多种文件存储服务作为后端,用于加速静态资源,管理用户上传文件. 自定静态文件 storage 如果通过修改配置文件满足不了你的需求,你随时可以通过继承 ...
- 8.Git撤销修改
有一个文件内容如下: $ cat README.md the first ... the second ... the third ... - 文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版 ...
- Mysql5.7.10新加用户
INSERT INTO mysql.user(HOST,USER,authentication_string,ssl_cipher,x509_issuer,x509_subject,select_pr ...
- [随感]GIS开发的困惑
从事GIS应用开发也有3年了,但是做了些东西自己始终不满意,不是不稳定就是效率低,不是功能杂就是不实用! 首先是AE开发,我必须说自己很欣赏ArcGIS的软件设计架构和思想.但是在开发的过程中也确实遇 ...