美文网首页
打下线程

打下线程

作者: 米来MiLai | 来源:发表于2019-11-06 23:03 被阅读0次

总体概览

线程基础

计算机早期,操作系统都没有线程的概念,整个系统只运行着一个执行线程,同时包含操作系统代码和应用程序代码。所以就存在一个问题,长时间运行的任务会阻止其他任务执行。例如:在16位Windows的那些日子,打印文档会“冻结“整台机器。
随后微软为了解决这部分问题,引入进程概念。但是CPU本身呢,应用程序发生死循环呢?所以线程应运而生,它是对CPU的虚拟化,为每个进程提供进程专用的线程。

开销
  1. 线程内核对象 (thread kernel object),包含线程上下文,上下文中保存CPU寄存器集合的内存块,在x64位系统中占1240字节
  2. 线程环境块 (thread environment block TEB),耗用一个内存页4KB
  3. 用户模式栈 (user-mode stack),系统保留1MB的地址空间。
  4. 内核模式栈 (kernel-mode stack),针对从用户模式的代码传递给内核的任何实参。x64 占用 24KB
  5. DLL 线程连接(attach)和 线程分离(detach)通知。
线程上下文切换
  1. 将CPU寄存器的值保存在当前正在运行的线程内核对象内部的一个上下文结构中。
  2. 从现有线程集合中选出一个线程供调度。如果该线程由另一个线程拥有,系统在开始执行任何代码或者接触任何数据之前,还必须切换CPU看见的虚拟地址空间。
  3. 将所选上下文结构中的值加载到CPU的寄存器中。

上下文切换大约耗时 30ms,一个时间片结束后,如果系统决定再次调用同一个线程,系统不会执行上下文切换。所以,你懂的,要尽量避免切换,4核最理想是4个线程同步执行。

初衷
微软在设计OS的时候,决定侧重于可靠性与相应能力,而非侧重于速度和性能。

使用线程理由

  1. 可响应性
  2. 性能
    • 计算限制的异步操作
    • 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 \color{red}8 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。

相关文章

  • 打下线程

    总体概览 计算机早期,操作系统都没有线程的概念,整个系统只运行着一个执行线程,同时包含操作系统代码和应用程序代码。...

  • 理解Java内存模型

    并发为啥会出现问题 原子性 其实去了解java内存模型主要是为java并发打下基础。我刚学编程接触多线程的时候,关...

  • 打下班卡啦

    早上八时十一分,大家都挤在打卡机旁,迫不及待的等待打卡下班。劳累了八个小时,一刻也不想再呆在这里,得赶紧回家睡觉,...

  • 打下的江山

    中国历史上各个新朝代的建立,少数是通过机谋从旧的体系内部承继而来的,更多的是通过战争收拾了破碎的旧山河重建起来的。...

  • 给自己打下气

    今天开始背诵了,很吃力,完全只能死记硬背,读了忘读了忘,好不容易记住了,结果北路下个内容上个内容又忘了,感觉自己得...

  • 雨点重重的打下来

    雨点重重的打下来,重重的打下来 世界安静了 噼里啪啦的,雨点重重的打下来 小猫狼狈的钻进胡同 小草频频低头 谁的裙...

  • 成吉思汗打下了半个亚洲,为何不打下整个印度

    一说起成吉思汗,不少的亚洲人都熟悉他。不仅仅是亚洲人,欧洲人也熟悉他。因为他曾经征服过半个欧洲,他发迹于蒙古高原。...

  • 每日小图20170224

    半成品图打下卡。

  • 2019-02-12,休息,打卡。

    今天休息,还是坚持打下卡。

  • Android

    线程间通信 主线程和工作线程主线程和工作线程 工作线程与工作线程工作线程与工作线程 为什么主线程Looper.lo...

网友评论

      本文标题:打下线程

      本文链接:https://www.haomeiwen.com/subject/bpsrbctx.html