• CLR Via CSharp读书笔记(25):线程基础


    进程与线程

    进程:应用程序的一个实例使用的资源的集合。每个进程都被赋予了一个虚拟地址空间

    线程:对CPU进行虚拟化,可以理解为一个逻辑CPU.

    线程要素

    线程包括以下要素:

    1. 线程内核对象, 其中包含

      1)一组对线程进行描述的属性

      2)线程上下文,即包含CPU寄存器的集合的一个内存块

    2. 线程环境块,在用户模式中分配和初始化的一个内存块,其中包含

      1)线程的异常处理链首  

      2)线程的"线程本地存储数据"

      3)由GDI和OpenGL图形使用的一些数据结构

    3. 用户模式栈

      1)存储传给方法的局部变量和实参

      2)包含当前方法返回时,线程接着执行的地址

    4. 内核模式栈

      1)用于应用程序代码想操作系统中的一个内核模式函数传递实参。Windows将实参从线程的用户模式栈复制到线程的内核模式栈

    5. DLL线程连接和线程分离通知

    上下文切换

    上下文切换(30毫秒):线程运行的时间片也叫量程。

    1. 保存CPU寄存器的值到线程内核对象的一个上下文结构中。还要考虑CPU的高速缓存(cache).

    2. 调度线程。

    3. 加载所选上下文结构中的值到CPU的寄存器中。

    使用线程的理由

    可以使用线程将代码同其他代码隔离;可以使用线程来实现并发执行;可以使用线程来简化编程;

    零页线程:系统启动时,会创建一个系统中唯一的优先级为0的零页线程,负责在没有其他进程需要执行的时候,将系统RAM的所有空闲页清零。

    显示创建线程

    非普通优先级运行,表现为前台线程,需要长时间运行, 需要提前终止。

    现在一个CLR线程直接对应一个Windows线程,将来LCR可能引入它自己的逻辑线程概念,使得一个CLR逻辑线程并非一定映射到一个物理Windows线程。

    一个进程中所有的前台进程停止运行时,CLR强制终止仍在运行的任何后台进程。因此,前台进程应该用于执行确实想完成的任务。

  • 相关阅读:
    Spring Boot基础
    MyBatis开启二级缓存
    MyBatis逆向工程
    html实现“加入收藏”代码
    vue-router 基本使用
    vue 脚手架安装
    webpack入门 webpack4常见出错之处
    $.ajax()方法详解
    防止网页被嵌套
    H5字符实体参考
  • 原文地址:https://www.cnblogs.com/thlzhf/p/2805525.html
Copyright © 2020-2023  润新知