孙鑫VC学习笔记:第十五讲 (一) 进程和线程基本概念
2007-12-25 14:45
603 查看
程序、进程和线程基本概念
——程序和进程
程序是计算机指令的集合,它以文件的形式存储在磁盘上。
进程:通常被定义为一个正在运行的程序的实例,
是一个程序在其自身的地址空间中的一次执行活动。
进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;
而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位,
因此,他不占用系统的运行资源。
进程由两个部分组成:
1、操作系统用来管理进程的内核对象。内核对象是操作系统内部分配的一个内存块,内核对象也是系统用来存放关于进程的统计信息的地方。
2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。他还包含动态内存分配的空间。如线程堆栈和堆分配空间。
内核对象:是操作系统内部分配的一个内存块,它是一种只能被内核访问的数据结构,
其成员负责维护该对象的各种信息,应用程序无法找到并直接改变它们的内容,
只能通过Windows提供的函数对内核对象进行操作
——进程
进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。
若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,
此线程负责执行包含在进程的地址空间中的代码。
单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码。
每个进程至少拥有一个线程,来执行进程的地址空间中的代码。
当创建一个进程时,操作系统会自动创建这个进程的一个线程,称为主线程。
此后,该线程可以创建其他的线程
进程、程序和线程
——线程
线程有两个部分组成:
1。线程的内核对象,操作系统用它来对线程实施管理,内核对象也是系统用来存放线程统计信息的地方。
2。线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。
当创建线程时,系统创建一个线程内核对象。
该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。
线程总是在某个进程环境中创建。
系统从进程的地址空间中分配内存,供线程的堆栈使用。
新线程运行的进程环境与创建线程的环境相同。
因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存
和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易的互相通信。
线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。
因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,
而尽量避免创建新的进程。
——线程运行
操作系统为每一个运行线程安排一定的CPU时间——时间片。
系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,
因时间片相当短,因此,给用户的感觉,就好像线程是同时进行的一样。
如果计算机拥有多个CPU,线程就能真正意义上运行了
注意:
我们可以用多进程代替多线程,但是这样不是明智的,因为
1.每新建一个进程,系统要为之分配4GB的虚拟内存,浪费资源;
而多线程共享同一个地址空间,占用资源较少
2.在进程之间发生切换时,要交换整个地址空间;
而线程之间的切换只是执行环境的改变, 效率较高。
——程序和进程
程序是计算机指令的集合,它以文件的形式存储在磁盘上。
进程:通常被定义为一个正在运行的程序的实例,
是一个程序在其自身的地址空间中的一次执行活动。
进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;
而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位,
因此,他不占用系统的运行资源。
进程由两个部分组成:
1、操作系统用来管理进程的内核对象。内核对象是操作系统内部分配的一个内存块,内核对象也是系统用来存放关于进程的统计信息的地方。
2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。他还包含动态内存分配的空间。如线程堆栈和堆分配空间。
内核对象:是操作系统内部分配的一个内存块,它是一种只能被内核访问的数据结构,
其成员负责维护该对象的各种信息,应用程序无法找到并直接改变它们的内容,
只能通过Windows提供的函数对内核对象进行操作
——进程
进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。
若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,
此线程负责执行包含在进程的地址空间中的代码。
单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码。
每个进程至少拥有一个线程,来执行进程的地址空间中的代码。
当创建一个进程时,操作系统会自动创建这个进程的一个线程,称为主线程。
此后,该线程可以创建其他的线程
进程、程序和线程
——线程
线程有两个部分组成:
1。线程的内核对象,操作系统用它来对线程实施管理,内核对象也是系统用来存放线程统计信息的地方。
2。线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。
当创建线程时,系统创建一个线程内核对象。
该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。
可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。
线程总是在某个进程环境中创建。
系统从进程的地址空间中分配内存,供线程的堆栈使用。
新线程运行的进程环境与创建线程的环境相同。
因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存
和在这个相同的进程中的所有其他线程的堆栈。
这使得单个进程中的多个线程确实能够非常容易的互相通信。
线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。
因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,
而尽量避免创建新的进程。
——线程运行
操作系统为每一个运行线程安排一定的CPU时间——时间片。
系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,
因时间片相当短,因此,给用户的感觉,就好像线程是同时进行的一样。
如果计算机拥有多个CPU,线程就能真正意义上运行了
注意:
我们可以用多进程代替多线程,但是这样不是明智的,因为
1.每新建一个进程,系统要为之分配4GB的虚拟内存,浪费资源;
而多线程共享同一个地址空间,占用资源较少
2.在进程之间发生切换时,要交换整个地址空间;
而线程之间的切换只是执行环境的改变, 效率较高。
相关文章推荐
- 孙鑫VC学习笔记:第十五讲 进程和线程基本概念
- 孙鑫VC学习笔记:第十四讲 (一) 网络的基本概念
- 孙鑫VC学习笔记:第十四讲 网络的基本概念
- 孙鑫VC学习笔记:第十六讲 利用关键代码段实现线程间的同步
- 孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信
- 孙鑫VC学习笔记:第十一讲 (一) 坐标空间与各种转换的概念
- 孙鑫VC学习笔记:第十七讲 用剪贴板实现进程间的通信
- 孙鑫VC学习笔记:第十一讲 (一) 坐标空间与各种转换的概念
- 孙鑫VC学习笔记:第十七讲 用匿名管道实现进程间的通信
- UNIX环境编程学习笔记(17)——进程管理之进程的几个基本概念
- 孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
- 线程学习笔记【1】----进程、线程概念及创建线程
- Python 学习笔记 - 线程(基本概念和创建)
- 孙鑫VC学习笔记:第十五讲 增加互斥条件实现线程同步
- 孙鑫VC学习笔记:第十一讲 (一) 坐标空间与各种转换的概念
- 孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序
- JAVA学习笔记49——线程概念+进程、线程区别+创建进程三种方法
- 孙鑫VC学习笔记:第十七讲 (四) 用邮槽实现进程间的通信
- 孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
- c#线程学习笔记一---基本概念