进程和线程
<h1 class="postTitle"> ?? ?今天面试,被考到进程和线程的概念,平时不好好学习,现在知道有用了,转一文,以做知识储备用 一个进程通常定义为程序的一个实例。在Win32中, 进程占据4GB的地址空间。与它们在MS-DOS和16位Windows操作系统中不同, Win32进程是没有活力的。这就是说,一个Win32进程并不执行什么指令,它只是占据着4GB的地址空间,此空间中有应用程序EXE文件的 代码和数据。EXE需要的任意DLL也将它们的代码和数据装入到进程的地址空间。除了地址空间,进程还占有某些资源,比如文件、动态内存分配和线程。当进程终止时,在它生命期中创建的各种资源将被清除。 但是进程是没有活力的,它只是一个静态的概念。为了让进程完成一些工作,进程必须至少占有一个线程,所以线程是描述进程内的执行,正是线程负责执行包含在进程的地址空间中的代码。实际上,单个进程可以包含几个线程, 它们可以同时执行进程的地址空间中的代码。为了做到这一点,每个线程有自己的一组CPU寄存器和堆栈。 线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。 每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。 多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。这一点在多线程编程时应该注意。 现代操作系统大都提供了相应的机制,用来处理线程的生存期、同步,以及其他“和线程有关”的属性,如优先级、线程专有存储空间(thread-specific storage)等。多线程编程是一门语言的难点和重点。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么ASP.Net重写runat = server锚控件的相对路径?
- Asp.net“全球”变量
- rest – 在ASP.NET Core中实现“JSON Merge Patch” – 最好
- asp.net-mvc – 我的MVC 5 Identity 2项目中没有Applicatio
- 我的asp.net应用程序需要“IIS元数据库和IIS 6配置兼容性”
- asp.net-mvc – 提供DDD,但需要一些其优点
- Safari和Asp.net中的cookie存在奇怪的问题
- 定时器_使用C#开发windows服务定时发消息到钉钉群_群组简单
- asp.net – 如何正确编码mailto链接?
- asp.net – Web.config Build vs Release transform不工作
- asp.net – 当页面加载是AJAX历史记录点的结果时
- asp.net – 恶意用户可以修改viewstate吗?
- asp.net – 消息处理程序和Http模块?
- asp.net-mvc – 如何检查是否为浏览器启用了cook
- asp.net – Response.Redirect(“SomeURL”,fals
- asp.net-mvc-4 – 尝试从Visual Studio 2012项目
- VS2015如何创建单元测试并启动调试
- Asp.Net MiddleWare与HttpModules
- asp.net-mvc – 从ASP.NET MVC操作返回什么来允许
- asp.net-mvc-3 – 验证隐藏的字段