(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框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
随机推荐
- tomcat项目快速启动设置
1.现象:tomcat启动项目时,耗费10几秒的时间 2.(tomcat7)解决:打开$JAVA_HOME/jre/lib/security/java.security这个文件 找到下面的内容:sec ...
- 【巷子】---vue项目打包---基本使用---【vue】
一.基本设置 二.打包 npm run build 三.github创建一个仓库 1.将文件上传至仓库 2.点击仓库设置 3.选择代码上传到master 4.点击地址即可预览 5.常用技巧 a.如果在 ...
- 04Add.ashx(新增班级)
04Add.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...
- Nginx + Tomcat 负载均衡配置详解
Nginx常用操作指南一.Nginx 与 Tomcat 安装.配置及优化1. 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel o ...
- 一致性hash 大众点评订单分库分表实践
井底之蛙 https://mp.weixin.qq.com/s?src=3×tamp=1543228894&ver=1&signature=uF6nV0yYseJ55 ...
- 设计模式之——Memento模式
Memento模式即快照模式,就是在某一时刻,设定一个状态,在后面随时可以返回到当前状态的模式. 我们拿一个闯关游戏作为举例,一共有十关,每闯一关,玩家所持金额增加一百,而闯关失败就扣一百.初始时,给 ...
- 202-React.Component组件、生命周期
一.概述 React可以将组件定义为类或函数.定义为类的组件当前提供了更多的功能.要定义React组件类,您需要扩展React.Component: class Welcome extends Rea ...
- django之中间件、缓存、信号、admin内置后台
目录: 中间件 缓存 信号 admin后台 一.中间件 1.什么是中间件? 中间件是一个.一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件 中间件可以对进来的请求和出去的 ...
- PHP生成唯一RequestID类
https://blog.csdn.net/fdipzone/article/details/79939431 本文介绍PHP生成唯一RequestID类,使用session_create_id()与 ...
- hive两大表关联优化试验
呼叫结果(call_result)与销售历史(sale_history)的join优化: CALL_RESULT: 32亿条/444G SALE_HISTORY:17亿条/439G 原逻辑 Map: ...