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)。如果应用程序的代码进入无限循环,与那个代码关联的进程会“冻结”,但其他进程(他们有自己的线程)不会冻结:他们会继续执行。