• 多线程系列(一):认识线程


    一、什么是线程

       线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程 序里执行多任务。通常由操作系统负责多个线程的调度和执行。

    二、线程的开销

    线程产生空间(内存消耗)和时间(运行时的执行性能)上的消耗。

    (1)线程内核对象

       包含一组描述线程的属性、线程上下文。

    (2)线程环境块(thread environment block)

     在用户模式下分配初始化的一个内存块。它包含线程异常处理链首。线程进入try块时,就会在这个链首插入节点,退出时删除节点。

    (3)用户模式栈

     存储传给方法的局部变量和实参。还包含一个当前方法返回时,应该从什么地方开始线程的地址。用户模式栈默认分配1M.

    (4)内核模式栈

      程序向操作系统内核模式的函数床底实参,会使用内核模式栈。从用户模式代码床给内核的任何实参,都会从线程的用户模式栈复制到线程的内核模式栈。

    (5)dll线程连接和分离通知

      进程创建一个线程,都会加载进程的所有dll,同时传递一个连接通知。反之,也回调用所有的dll,并传递一个分离通知。

    (6)上下文切换

      在任何时刻,系统只将一个线程分配给一个cpu,并可以运行一个时间片,时间片到期,就会发生上下文切换,切换到另一个线程。

        A、对于即将结束运行的的线程,它存在cpu寄存器中的值保存到此线程内核对象的上下文结构中。

        B、选择要切换加载的新线程,并将此线程的上下文加载到cpu寄存器。

        C、cpu执行所选的新线程,运行一个时间片,如上再次切换。。。

      注意:

        这样的话,如果一个程序无限循环,系统会定期抢占。

        如果要切换到同样的线程,就不会切换上下文。

        执行垃圾回收,CLR必须暂停所有的线程,遍历栈,查找根,对队中的对象进行标记。恢复所有线程。

  • 相关阅读:
    MySql
    Docker
    达观数据
    Python面试题
    用Python构造ARP请求、扫描、欺骗
    git上传简单的命令行分析
    vue2自定义指令的作用
    自定义指令详解 vue
    文档打印 js
    通过Export2Zip实现表格内容下载成为excel文件
  • 原文地址:https://www.cnblogs.com/sunchong/p/3948507.html
Copyright © 2020-2023  润新知