进程与线程:
进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。简而言之,一个程序至少有一个进程,一个进程至少有一个线程, 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
关于线程有没有堆说明下:与线程“绑定”的是栈,用于存储自动变量。每一个线程建立的时候,都会新建一个默认栈与之配合。堆则是通常与进程相关,用于存储全局性的变量,进程建立的时候,会建立默认堆。于是,每一个线程都有自己的栈,然后访问共同的堆。当然,你可以通过OsApi建立其他堆栈。
线程是指进程内的一个执行单元,也是进程内的可调度实体。进程与线程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间。
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源。
(3)线程是处理器调度的基本单位,但进程不是。
(4)二者均可并发执行。
多线程的实现原理:
创建一个进程时,它的第一个线程称为主线程(Primary thread),由系统自动生成。然后可以由这个主线程生成额外的线程,而这些线程,又可以生成更多的线程。在运行一个多线程的程序时,从表面上看,这些线程似乎在同时运行。而实际情况并非如此,为了运行所有的这些线程,操作系统为每个独立线程安排一些CPU时间。单CPU操
作系统以轮转方式向线程提供时间片(Quantum),每个线程在使用完时间片后交出控制,系统再将CPU时间片分给下一个线程。由于每个时间片足够的短,这样就给人一种假象,好像这些线程在同时运行。创建额外线程的唯一目的就是尽可能地利用CPU时间。
线程的同步问题:
在使用多线程编程时,还有一个非常重要的问题就是线程同步。所谓线程同步是指线程之间在相互通信时避免破坏各自数据的能力。同步问题是由前面说到的Win32系统的CPU时间片分配方式引起的。虽然在某一时刻,只有一个线程占用CPU(单CPU时)时间,但是没有办法知道在什么时候,在什么地方线程被打断,这样如何保证线程之间不破坏彼此的数据就显得格外重要。
引入线程的好处:
(1)并发执行发生在线程实体上,因而系统对处理机的分配也发生在线程之间,而线程的切换改善了系统的时空开销,包括内存管理、线程切换时间。
(2)系统创建或终止一个线程的开销要比创建和终止一个进程的开销要少得多。
(3)线程之间的通信的效率要高于进程之间通信的效率。进程间通信要内核介入,而同一个进程的多个线程由于共享同一地址空间,所以通信无需内核介入。