zoukankan      html  css  js  c++  java
  • Windows为什么要支持线程

      Windows为什么要支持线程,进程与线程的联系与区别是什么?

      在计算机的早期岁月,操作系统没有提供线程概念。事实上整个系统只运行着一个执行线程,其中同时包含操作系统代码和应用程序。只用一个执行线程的问题在于,长时间运行的任务会阻止其他任务执行。例如,在16位Windows的那些日子,打印一个文档的应用程序很容易“冻结”整个机器,造成OS和其他应用程序停止响应。有的应用程序含有bug,会造成无限循环,这同样会造成整个机器停止工作。

      遇到这个问题,用户只好按Reset键或电源开关重启计算机。用户们对此感到深恶痛绝(事实上,现在一样会),因为所有正在运行的应用程序都会终止。更重要的是,这些应用程序正在处理的数据都会无端地丢失。Microsoft明白16位Windows不是一个理想的操作系统。随着计算机工业的持续进步,它不足以保持Microsoft的领先地位。所以,他们计划构建一个新的OS来满足企业和个人的需要。这个新的OS必须健壮、可靠、易于伸缩一级安全,而且它必须改进16位Windows的许多不足。这个OS内核最初是在Microsoft Windows NT中发布的。经过多年的发展,这个内核已进行恶龙大量改进,添加了大量功能。Microsoft每次发布客户端和服务器Windows 操作系统的最新版本时,都在其中采用了这个内核的最新版本。

      Microsoft设计这个OS内核时,他们决定在一个进程(process)中运行应用程序的每个实例。进程不过是应用程序的一个实例要使用的资源的合集。每个进程都被赋予一个虚拟地址空间,确保一个进程使用的代码和数据无法由另一个进程访问。这就确保了应用程序实例的健壮性,因为一个成成无法破坏另一个进程所使用的代码或数据。除此之外,OS的内核代码和数据时进程访问不到的;所以,应用程序代码破坏不了操作系统代码或数据。由于应用程序代码破坏不了其他应用程序或者OS自身,所以用户的计算体验变得更好了。除此之外,系统变得比以往更安全,因为应用程序代码无法访问另一个应用程序或者OS自身使用的用户名、密码、信用卡资料或者其他敏感信息。

      听起来似乎不错,但CPU本身呢?如果一个应用程序进入无限循环,会发生什么?如果机器中只有一个CPU,它会执行无限循环,不能执行其他然和东西。所以,虽然数据无法被破坏,而且更安全,但系统仍然可能停止响应。Microsoft需要修正这个问题,他们拿出的方案就是线程。作为一个Windows概念,线程(thread)的职责是对CPU进行虚拟化。Windows为每个进程都提供了该进程专用的线程(功能相当于一个CPU,可将线程理解成一个逻辑CPU)。如果应用程序的代码进入无限循环,与那个代码关联的进程会“冻结”,但其他进程(他们有自己的线程)不会冻结:他们会继续执行。

  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/2469707.html
Copyright © 2011-2022 走看看