-
C#教程之线程基础
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
计算机早期,操作系统都没有线程的概念,整个系统只运行着一个执行线程,同时包含操作系统代码和应用程序代码。所以就存在一个问题,长时间运行的任务会阻止其他任务执行。例如:在16位Windows的那些日子,打印文档会“冻结“整台机器。
随后微软为了解决这部分问题,引入进程概念。但是CPU本身呢,应用程序发生死循环呢?所以线程应运而生,它是对CPU的虚拟化,为每个进程提供进程专用的线程。
总体概览
开销
- 线程内核对象 (thread kernel object),包含线程上下文,上下文中保存CPU寄存器集合的内存块,在x64位系统中占1240字节
- 线程环境块 (thread environment block TEB),耗用一个内存页4KB。
- 用户模式栈 (user-mode stack),系统保留1MB的地址空间。
- 内核模式栈 (kernel-mode stack),针对从用户模式的代码传递给内核的任何实参。x64 占用 24KB。
- DLL 线程连接(attach)和 线程分离(detach)通知。
线程上下文切换
- 将CPU寄存器的值保存在当前正在运行的线程内核对象内部的一个上下文结构中。
- 从现有线程集合中选出一个线程供调度。如果该线程由另一个线程拥有,系统在开始执行任何代码或者接触任何数据之前,还必须切换CPU看见的虚拟地址空间。
- 将所选上下文结构中的值加载到CPU的寄存器中。
上下文切换大约耗时 30ms,一个时间片结束后,如果系统决定再次调用同一个线程,系统不会执行上下文切换。所以,你懂的,要尽量避免切换,4核最理想是4个线程同步执行。初衷,微软在设计OS的时候,决定侧重于可靠性与相应能力,而非侧重于速度和性能。
使用线程理由
- 可响应性
-
性能
- 计算限制的异步操作
- I/O限制的异步操作
线程调度和优先级
Windows 又被称之为抢占式多线程(preemptive multi-threaded)操作系统,是因为线程可在任何时间停止被抢占并调度另一个线程。线程分0到31的优先级,其中0为零页线程,在没有其他线程工作的时候,零页线程将系统内存中的所有空闲页清零。一般线程优先级为Normal,如图与线程存在Normal进程中的Normal线程,也就是8。
相对线程优先级 |
进程优先级类 Idle |
Below Normal | Normal | Above Normal | High | Realtime |
---|---|---|---|---|---|---|
Time-Critical | 15 | 15 | 15 | 15 | 15 | 31 |
Highest | 6 | 8 | 10 | 12 | 15 | 26 |
Above Normal | 5 | 7 | 9 | 11 | 14 | 25 |
Normal | 4 | 6 | 10 | 13 | 24 | |
Below Normal | 3 | 5 | 7 | 9 | 12 | 23 |
Lowest | 2 | 4 | 6 | 8 | 11 | 22 |
Idle | 1 | 1 | 1 | 1 | 1 | 16 |
前台线程和后台线程
CLR将每个线程要么视为前台线程,要么视为后台线程。一个进程所有前台线程停止运行时,CLR强制终止仍然在运行的后台线程,并不抛出异常。关键字:Background。
栏目列表
最新更新
asp.net MVC通用权限管理系统-响应式布局
线程基础
.net core web api 添加对session跨域实现
C# 常用工具方法之DataTable(一)
C# System.Timers Demo
2019年Unity学习资源指南[精心整理]
用Unity做游戏,你需要深入了解一下IL2C
GPS定位的偏移校正(WGS84与火星坐标互转
C#面向对象--继承
C#面向对象--多态
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能
将Session值储存于SQL Server中
使用SQL Server数据库嵌套子查询的方法
SQL概述