线程与进程

学习多线程前,先学习下进程。

 

进程  是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。

 

进程   是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。

    第一,进程是一个实体。

    第二,进程是一个“执行中的程序”。

 

进程的特征 

     动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。

  并发性:任何进程都可以同其他进程一起并发执行

  独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

  异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

  结构特征:进程由程序、数据和进程控制块三部分组成。

 

线程与进程的区别与联系

相同点:

线程是比进程更小的处理模块。

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

 

进程和线程的区别在于:

1、一个程序至少有一个进程,一个进程至少有一个线程

2、进程在执行过程中拥有独立的内存单元。多个线程共享内存。

3、线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

   每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口

   进程可以独立执行(它的独立性)。

什么时候使用多线程

1.             耗时的操作使用线程,提高应用程序响应

2.            并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。

3.            多CPU系统中,使用线程提高CPU利用率

4.            改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

使用多线程好处

(1)与进程相比

A、是一种非常花销小,切换快,更"节俭"的多任务操作方式。

在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。

而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。

B、线程间方便的通信机制 

对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。

线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。

(2) 不与进程相比

多线程程序作为一种多任务、并发的工作方式,当然有以下的优点:

1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
  2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
  3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 

posted @ 2010-07-08 21:24  鸽子888  阅读(189)  评论(0编辑  收藏  举报