Windows Via C/C++:线程概述

线程概述

理解线程是很重要的,因为进程的执行至少需要一个线程。本章会详细讨论线程,包括线程和进程之间的区别和各自的任务、线程内核对象及其属性、操作线程内核对象的各种方法、在进程内创建线程的方法等。

在第四章“进程”中,我们说过进程实际上由两部分组成:进程内核对象和进程地址空间。类似的,线程也包括两个部分:

  • 线程内核对象:用于操作系统用于管理线程、存储线程统计信息
  • 线程栈:存储线程执行时的所有函数参数和局部变量。第16章“线程栈”将进一步解释操作系统如何管理线程栈

进程是惰性的——它从不执行任何代码,它只是线程的容器。线程总是在某个进程环境中被创建、运行并且终止,也就是说线程在进程地址空间中执行代码、操作数据,因此进程中的多个线程将共享进程地址空间中的数据,包括进程的句柄表。

进程会消耗许多系统资源,这是因为进程需要地址空间。操作系统管理进程地址空间时需要保持大量的记录并消耗可观的内存,另外向进程地址空间载入dll和exe文件也会消耗一定的文件资源。与进程相比,线程消耗的系统资源非常有限——它仅仅需要一个内核对象和一个栈。因为使用线程的开销比较小,解决多任务问题时你应该尽量选择使用多线程而不是多进程。但是,这并不是金科玉律,有些情况使用进程会更好些,这需要设计者的权衡。

在揭示线程本质之前,让我们花一点时间来讨论如何在应用程序中正确的使用线程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章