进程与线程

进程是处于运行之中的程序,具有一定的独立能力,它是系统进行资源分配和调度的一个独立单位。

    几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。

    当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。

进程的特征:

①独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己的私有地址;

②动态性:进程和程序的区别在于:

  ① 程序只是一个静态的指令序列集合(可执行文件),是一个被动的实体,而进程是一个正在系统中活动的指令集合; 

  ② 在程序中加入了时间的概念,而进程是活动的实体,具有自己的生命周期和各种不同的状态,拥有PC,堆栈,状态等,这些概念是程序所没有的概念;

  ③ 多个进程可与一个程序相关,但它们被认为是多个独立运行的指令序列;

③并发性:多个进程可以在单个处理器中并发执行,多个进程之间不会相互影响;

 

多线程则扩展了多进程的概念,使得同一个进程可以同时并发处理多个任务。线程也被称为轻量级进程(Lightweight Process),线程是进程的执行单元。

就像进程在操作系统中的地位一样,线程在程序中是独立、并发执行流。当进程被初始化后,主线程就被创建。对于绝大多数应用程序来说,通常仅要一个主线程,

但我们也可以在该进程内创建多条顺序执行流,这些顺序执行流就是线程,每条线程也互相独立的。

    线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆、栈、程序计数器、局部变量,但不能拥有系统资源,

它与父进程的其他线程共享该进程所有的全部资源。因为多个线程共享父进程的全部资源。

    线程可以完成一定的任务,可与其他线程共享父进程中的变量和部分环境,相互之间协作共同完成进程所要完成的任务。

    线程是独立运行的,它并不知道进程中是否还有其他进程存在。线程的执行是抢占方式的,也就是说,当前运行的线程在任何时候都可以被挂起,以便其他线程运行。

一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行。

综述:一个程序运行后至少有一个进程,一个进程可以包含多个线程。至少包含一个线程。

 

多线程比多进程的优势:

  ① 功能上:有些应用程序,需要多种活动共享同一个地址空间和所有可用数据的能力,多线程可以实现;

  ② 非功能上:

     线程比进程更轻量级,更容易被创建,被撤销,多线程实现并发比多进程实 现并发更高效

    多线程之间的切换更高效快速     

    提高了程序的运行效率,多个线程共享进程的内存资源; 

    在多处理器中,多线程是有益的,真正的并行有了实现的可能 

 

多线程编程的优点:

1.响应度高 2.资源共享 3.经济 4.多处理器体系结构的应用

 

是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理:
(1)耗时或大量占用处理器的任务阻塞用户界面操作;

(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)

多线程的主要缺点包括:
(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。

(2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。

(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。

(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

 

线程不能单独执行,它必须运行在处于活动状态的进程中,可以说线程是程序内部的具有并发性的顺序执行流;

线程与进程之间的区别: 

  (1)地址空间:线程是进程内的一个可执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

  (2)资源拥有:进程是系统进行资源分配和调度的独立单元,同一个进程内的线程共享进程的资源;

  (3)线程是处理器调度和分派的基本单位,但进程不是

多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看作多个独立的应用来实现进程的调度和管理以及资源分配;这是进程和线程的重要区别;

进程是系统进行资源调度和分配的独立单元;线程是进程的一个实体,是处理器(CPU)调度和分派的基本单位;

线程基本上不拥有系统资源,只拥有运行中必不可少的资源(PCRegisterStack,Stated等),但是它与同属于一个进程的其他的线程共享所拥有的全部资源。

 

 

 

 

 

  

原文地址:https://www.cnblogs.com/diyingyun/p/2271152.html