精华内容
参与话题
问答
  • 线程与进程

    2015-08-05 15:18:40
    进程间相互独立,同一进程内的两段代码不能同时进行,如要进行除非引入线程线程进程空间内,同一进程所产生的线程共享同一内存空间。 3.状态角度 进程退出,导致所有线程全部退出并清除。 4.通信角度 进程间...

    区别与联系

    1.定义角度
    进程是一次程序的执行;线程是进程中执行的一段程序片段。
    2.内存角度
    进程间相互独立,同一进程内的两段代码不能同时进行,如要进行除非引入线程,线程在进程空间内,同一进程所产生的线程共享同一内存空间。
    3.状态角度
    进程退出,导致所有线程全部退出并清除。
    4.通信角度
    进程间可以通过IPC通信,但线程间不可以。

    线程安全

    此问题只针对于多线程情况,多个线程同时操作全局变量或者静态变量时会出现“线程安全”问题,比如对于一个数组array[],全局变量size=0,此时利用两个线程向数组里添加元素,并且改变size,线程1添加1后暂停,线程2添加2后,线程1,2都执行完后,输出结果都是size = 1,但是我们想要的结果是size = 2,所以此时线程不安全,如何能安全呢,考虑同步的问题,或者线程只读不写,就不会出现不安全。

    展开全文
  • 线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,...

    原文:http://blog.csdn.net/luoweifu/article/details/46595285 
    作者:luoweifu 
    转载请标名出处



    什么是线程

    什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲的话,也不能确保讲的内容全部都正确。即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱。

     

    任务调度

    线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(WindowsLinux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发(别觉得并发有多高深,它的实现很复杂,但它的概念很简单,就是一句话:多个任务同时执行)。多任务运行过程的示意图如下:


    图 1操作系统中的任务调度

     

     

    进程

    我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序侧是具有某种功能的程序,程序是运行于操作系统之上的。

    进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序、数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块(Program Control Block,简称PCB)包含进程的描述信息和控制信息,是进程存在的唯一标志。

    进程具有的特征:

    动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

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

    独立性:进程是系统进行资源分配和调度的一个独立单位;

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

     

    线程

    在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。

    后来,随着计算机的发展,对CPU的要求越来越高,进程之间的切换开销较大,已经无法满足越来越复杂的程序的要求了。于是就发明了线程,线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。

     

     

    进程与线程的区别

    前面讲了进程与线程,但可能你还觉得迷糊,感觉他们很类似。的确,进程与线程有着千丝万缕的关系,下面就让我们一起来理一理:

    1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

    2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;

    3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;

    4.调度和切换:线程上下文切换比进程上下文切换要快得多。

     

    线程与进程关系的示意图:


    图 2进程与线程的资源共享关系

     


    图 3:单线程与多线程的关系

     

    总之,线程和进程都是一种抽象的概念,线程是一种比进程更小的抽象,线程和进程都可用于实现并发。

     

    在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。它相当于一个进程里只有一个线程,进程本身就是线程。所以线程有时被称为轻量级进程(Lightweight ProcessLWP)。


    图 4早期的操作系统只有进程,没有线程

    后来,随着计算机的发展,对多个任务之间上下文切换的效率要求越来越高,就抽象出一个更小的概念——线程,一般一个进程会有多个(也可是一个)线程。


    图 5:线程的出现,使得一个进程可以有多个线程

     

    多线程与多核

    上面提到的时间片轮转的调度方式说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。很多操作系统的书都说“同一时间点只有一个任务在执行”。那有人可能就要问双核处理器呢?难道两个核不是同时运行吗?

    其实“同一时间点只有一个任务在执行”这句话是不准确的,至少它是不全面的。那多核处理器的情况下,线程是怎样执行呢?这就需要了解内核线程。

    多核()处理器是指在一个处理器上集成多个运算核心从而提高计算能力,也就是有多个真正并行计算的处理核心,每一个处理核心对应一个内核线程。内核线程(Kernel Thread, KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。一般一个处理核心对应一个内核线程,比如单核处理器对应一个内核线程,双核处理器对应两个内核线程,四核处理器对应四个内核线程。

    现在的电脑一般是双核四线程、四核八线程,是采用超线程技术将一个物理处理核心模拟成两个逻辑处理核心,对应两个内核线程,所以在操作系统中看到的CPU数量是实际物理CPU数量的两倍,如你的电脑是双核四线程,打开“任务管理器\性能”可以看到4CPU的监视器,四核八线程可以看到8CPU的监视器。

     

    图 6:双核四线程在Windows8下查看的结果

    超线程技术就是利用特殊的硬件指令,把一个物理芯片模拟成两个逻辑处理核心,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。这种超线程技术(如双核四线程)由处理器硬件的决定,同时也需要操作系统的支持才能在计算机中表现出来。

     

    程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Light Weight ProcessLWP),轻量级进程就是我们通常意义上所讲的线程(我们在这称它为用户线程),由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。用户线程与内核线程的对应关系有三种模型:一对一模型、多对一模型、多对多模型,在这以4个内核线程、3个用户线程为例对三种模型进行说明。

    一对一模型

    对于一对一模型来说,一个用户线程就唯一地对应一个内核线程(反过来不一定成立,一个内核线程不一定有对应的用户线程)。这样,如果CPU没有采用超线程技术(如四核四线程的计算机),一个用户线程就唯一地映射到一个物理CPU的线程,线程之间的并发是真正的并发。一对一模型使用户线程具有与内核线程一样的优点,一个线程因某种原因阻塞时其他线程的执行不受影响;此处,一对一模型也可以让多线程程序在多处理器的系统上有更好的表现。

    但一对一模型也有两个缺点:1.许多操作系统限制了内核线程的数量,因此一对一模型会使用户线程的数量受到限制;2.许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降。

     

     

    图 7:一对一模型

     

     

    多对一模型

    多对一模型将多个用户线程映射到一个内核线程上,线程之间的切换由用户态的代码来进行,因此相对一对一模型,多对一模型的线程切换速度要快许多;此外,多对一模型对用户线程的数量几乎无限制。但多对一模型也有两个缺点:1.如果其中一个用户线程阻塞,那么其它所有线程都将无法执行,因为此时内核线程也随之阻塞了;2.在多处理器系统上,处理器数量的增加对多对一模型的线程性能不会有明显的增加,因为所有的用户线程都映射到一个处理器上了。

     

    图 8:多对一模型

     

    多对多模型

    多对多模型结合了一对一模型和多对一模型的优点,将多个用户线程映射到多个内核线程上。多对多模型的优点有:1.一个用户线程的阻塞不会导致所有线程的阻塞,因为此时还有别的内核线程被调度来执行;2.多对多模型对用户线程的数量没有限制;3.在多处理器的操作系统中,多对多模型的线程也能得到一定的性能提升,但提升的幅度不如一对一模型的高。

    在现在流行的操作系统中,大都采用多对多的模型。

     

    图 9:多对多模型

     

     

    查看进程与线程

    一个应用程序可能是多线程的,也可能是多进程的,如何查看呢?在Windows下我们只须打开任务管理器就能查看一个应用程序的进程和线程数。按“Ctrl+Alt+Del”或右键快捷工具栏打开任务管理器。

    查看进程数和线程数:

     

    图 10:查看线程数和进程数

    在“进程”选项卡下,我们可以看到一个应用程序包含的线程数。如果一个应用程序有多个进程,我们能看到每一个进程,如在上图中,Googlechrome浏览器就有多个进程。同时,如果打开了一个应用程序的多个实例也会有多个进程,如上图中我打开了两个cmd窗口,就有两个cmd进程。如果看不到线程数这一列,可以在点击“查看\选择列”菜单,增加监听的列。

     

    查看CPU和内存的使用率:

    在性能选项卡中,我们可以查看CPU和内存的使用率,根据CPU使用记录的监视器的个数还能看出逻辑处理核心的个数,如我的双核四线程的计算机就有四个监视器。

     

    图 11:查看CPU和内存的使用率

     

     

    线程的生命周期

    当线程的数量小于处理器的数量时,线程的并发是真正的并发,不同的线程运行在不同的处理器上。但当线程的数量大于处理器的数量时,线程的并发会受到一些阻碍,此时并不是真正的并发,因为此时至少有一个处理器会运行多个线程。

    在单个处理器运行多个线程时,并发是一种模拟出来的状态。操作系统采用时间片轮转的方式轮流执行每一个线程。现在,几乎所有的现代操作系统采用的都是时间片轮转的抢占式调度方式,如我们熟悉的UnixLinuxWindowsMac OS X等流行的操作系统。

    我们知道线程是程序执行的最小单位,也是任务执行的最小单位。在早期只有进程的操作系统中,进程有五种状态,创建、就绪、运行、阻塞(等待)、退出。早期的进程相当于现在的只有单个线程的进程,那么现在的多线程也有五种状态,现在的多线程的生命周期与早期进程的生命周期类似。

     

    图 12:早期进程的生命周期


    进程在运行过程有三种状态:就绪、运行、阻塞,创建和退出状态描述的是进程的创建过程和退出过程。

    创建:进程正在创建,还不能运行。操作系统在创建进程时要进行的工作包括分配和建立进程控制块表项、建立资源表格并分配资源、加载程序并建立地址空间;

    就绪:时间片已用完,此线程被强制暂停,等待下一个属于他的时间片到来;

    运行:此线程正在执行,正在占用时间片;

    阻塞:也叫等待状态,等待某一事件(IO或另一个线程)执行完;

    退出:进程已结束,所以也称结束状态,释放操作系统分配的资源。

     

    图 13:线程的生命周期

     

    创建:一个新的线程被创建,等待该线程被调用执行;

    就绪:时间片已用完,此线程被强制暂停,等待下一个属于他的时间片到来;

    运行:此线程正在执行,正在占用时间片;

    阻塞:也叫等待状态,等待某一事件(IO或另一个线程)执行完;

    退出:一个线程完成任务或者其他终止条件发生,该线程终止进入退出状态,退出状态释放该线程所分配的资源。


    线程和进程相关文章:

    编程思想之多线程与多进程(2)——线程优先级与线程安全

    编程思想之多线程与多进程(3)——Java中的多线程

    编程思想之多线程与多进程(4)——C++中的多线程


    原文:http://blog.csdn.net/luoweifu/article/details/46595285 
    作者:luoweifu 
    转载请标名出处


    ========================编程思想系列文章回顾========================

    编程思想之消息机制

    编程思想之日志记录

    编程思想之异常处理

    编程思想之正则表达式

    编程思想之迭代器

    编程思想之递归

    编程思想之回调




    关注【SunLogging】 
    这里写图片描述 
    长按或扫码二维码,在手机端阅读更多内容


    展开全文
  • Java进阶(四十三)线程与进程的区别

    万次阅读 多人点赞 2016-09-28 08:50:07
    Java进阶(四十三)线程与进程的区别1、线程的基本概念  概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的...

    #Java进阶(四十三)线程与进程的区别
    ##1、线程的基本概念
      概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
      好处:

    • (1)易于调度。

    • (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。

    • (3)开销少。创建线程比创建进程要快,所需开销很少。

    • (4)利于充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

    ##2、进程的基本状态及状态之间的关系

    ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/297cce195d989e1d706795e628d42c45.png)

      详见博文《 Java进阶(四十一)多线程讲解》。
    ##3、线程和进程的关系以及区别
    ###进程和线程的关系

    • (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

    • (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

    • (3)处理机分给线程,即真正在处理机上运行的是线程。

    • (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.

    ###进程与线程的区别

    • (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

    • (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。

    • (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

    • (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

    ##4、进程间通信的方式
    ###(1)管道(pipe)及有名管道(named pipe)
      管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系;有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    ###(2)信号(signal)
      信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
    ###(3)信号量(semaphore)
      信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程之间及同一种进程的不同线程之间的同步和互斥手段。
    ###(4)消息队列(message queue)
      消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。具有写权限的进程可以按照一定的规则向消息队列中添加新信息;对消息队列有读权限的进程则可以从消息队列中读取信息。
    ###(5)共享内存(shared memory)
      可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
    ###(6)套接字(socket)
      这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
    ##5、线程间通信的方式
    ###锁机制
      包括互斥锁、条件变量、读写锁

    • 互斥锁提供了以排他方式防止数据结构被并发修改的方法。
    • 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
    • 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

    ###信号量机制(Semaphore)
      包括无名线程信号量和命名线程信号量。
    ###信号机制(Signal)
      类似进程间的信号处理。
      线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
    ###管道(Pipe)
      示例代码如下:

     package cn.edu.ujn.demo;
    
    import java.io.PipedReader;
    import java.io.PipedWriter;
    
    public class Piped {
    
    	public static void main(String[] args) throws Exception{
    		PipedWriter out = new PipedWriter();
    		PipedReader in = new PipedReader();
    		// 连接输入流和输出流,否则会报异常:java.io.IOException: Pipe not connected
    		out.connect(in);
    		Thread printThread = new Thread(new Print(in), "PrintThread");
    		printThread.start();
    		int receive = 0;
    		try {
    			while((receive = System.in.read()) != -1){
    				out.write(receive);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			out.close();
    		}
    	}
    
    }
    
    class Print implements Runnable{
    	private PipedReader in;
    	
    	public Print(PipedReader in){
    		this.in = in;
    	}
    	
    	public void run(){
    		int receive = 0;
    		try {
    			while((receive = in.read()) != -1){
    				System.out.print((char)receive);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    }
    

    ##6、同步和互斥的区别
      当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源。例如,假设有一个程序,其中一个线程用于把文件写到内存,而另一个线程用于统计文件中的字符数。当然,在把整个文件调入内存之前,统计它的字符数是没有意义的。但是,由于每个操作都有自己的线程,操作系统会把两个线程当作是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字符数。为解决此问题,你必须使两个线程同步工作。
      所谓同步,是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
      所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。如果用对资源的访问来定义的话,互斥某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

    ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/5ccfa1009c03947840196de4004ba295.png) ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/d502db58434685a1eb635cabcccb0029.png) ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/32ad2882d4917a68290c6c677e5e3229.png)
    展开全文
  • 线程与进程的特征及区别定义及特征进程  指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。进程的特征: 1.动态性:进程的实质是程序的一次...

    #线程与进程的特征及区别
    ##定义及特征
    ###进程
      指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。
    ###进程的特征:

    • 1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。
    • 2.并发性:任何进程都可以同其他进程一起并发执行。
    • 3.独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
    • 4.异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

    ###线程
      线程是进程中的一个实体,作为系统调度和分派的基本单位。
      多线程运行在同一进程的相同地址空间内,和采用多进程相比有以下优点:

    ###相比于进程线程的优点

    • 1.创建和撤销线程的开销较之进程要少。创建线程时只需要建立线程控制表相应的表目,或有关队列,而创建进程时,要创建PCB表和初始化,进入有关进程队列,建立它的地址空间和所需资源等。

    • 2.CPU在线程之间切换时的开销远比进程要少得多。因为切换线程都在同一地址空间内,只需要修改线程控制表或队列,不涉及地址空间和其他工作。

    • 3.线程机制增加了通讯的有效性。进程间的通讯往往要求内核的参与,以提供通讯机制和保护机制,而线程间的通讯是在同一进程的地址空间内,共享主存和文件,无需内核参与。

    ##三、进程和线程的区别
    ###(1)调度
      在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位,进程则作为资源拥有的基本单位,从而使传统进程的两个属性分开,线程编程轻装运行,这样可以显著地提高系统的并发性。同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用,但是在由一个进程中的线程切换到另一进程中的线程,依然会引起进程切换。
    ###(2)并发性
      在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,因而使操作系统具有更好的并发性,从而更有效地提高系统资源利用率和系统吞吐量。例如,在一个未引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入线程的操作系统中,可以在一个文件服务进程中设置多个服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统吞吐量。
    ###(3)拥有资源
      不论是引入了线程的操作系统,还是传统的操作系统,进程都是拥有系统资源的一个独立单位,他可以拥有自己的资源。一般地说,线程自己不能拥有资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源,亦即一个进程的代码段、数据段以及系统资源(如已打开的文件、I/O设备等),可供同一个进程的其他所有线程共享。
    ###(4)独立性
      在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。这是因为为防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其它资源,除了共享全局变量外,不允许其它进程的访问。但是同一进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问它们所属进程地址空间中的所有地址,如一个线程的堆栈可以被其它线程读、写,甚至完全清除。
    ###(5)系统开销
      由于在创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的,在进程切换时,涉及到整个当前进程保存CPU环境的设置以及新被调度运行的CPU环境设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销远大于线程切换的开销。此外,由于同一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现也变得比较容易。在有的系统中,线程的切换、同步、和通信都无需操作系统内核的干预。
    ###(6)支持多处理机系统
      在多处理机系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,这无疑将加速进程的完成。因此,现代处理机OS都无一例外地引入了多线程。

    ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/5ccfa1009c03947840196de4004ba295.png) ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/d502db58434685a1eb635cabcccb0029.png) ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/32ad2882d4917a68290c6c677e5e3229.png)
    展开全文
  • 高性能编程之线程与进程

    万次阅读 2020-05-10 12:57:57
    进程的描述控制 重新补一下大学学习的知识 操作系统 进程定义:在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性,以及其运行结果不可再现性的特征.由此,决定了通常的程序是不能参与...
  • 科普帖:线程与进程

    千次阅读 多人点赞 2013-09-18 11:24:14
    进程线程:一个人在一个桌子上吃菜。单进程线程:多个人在同一个桌子上一起吃菜。多进程单线程:多个人每个人在自己的桌子上吃菜。 多线程的问题是多个人同时吃一道菜的时候容易发生争抢,例如两个人同时夹一...
  • 进程线程的概念: 进程是表示资源分配的基本单位,又是调度运行的基本单位。用户运行自己的程序,系统就创建一个进程,并为它分配各类资源。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配...
  • 线程与进程区别 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源...
  • 线程与进程的关系

    千次阅读 2018-12-17 19:41:33
    线程进程1 线程进程2
  • 线程与进程的区别

    万次阅读 2018-12-30 17:26:58
    进程线程的区别 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。 线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本...
  • java线程与进程

    千次阅读 2018-03-26 12:35:07
    线程:1)进程中负责程序执行的执行单元2)依靠程序执行的顺序控制流,只能使用程序的资源和环境,共享进程的全部资源3)有自己的堆栈和局部变量,没有单独的地址空间4)CPU调度和分派的基本单位,持有程序计数器,...
  • 线程与进程详解

    2015-04-09 14:18:03
    线程与进程的比较:  线程具有许多传统进程具有的特征,所以,又称为轻型进程(Light-Weight Process)或进程元,相应地把传统进程称为重型进程(Heavy-Weight Process),传统进程相当于只有一个线程的任务。在引入了...
  • IOS中线程与进程的概念

    千次阅读 2013-12-24 14:10:46
    1、进程 是活动的程序,是一个容器 是系统资源管理的最小单位... 一个进程内只有一个线程  一个进程内的数据通常加载在同一内存中! 4、多线程  一个进程内有多个线程  多个线程通常共享同一内存
  • UNIX线程与进程

    2015-12-21 10:34:11
    进程与线程有根本上的不同。每个进程有其独立的数据空间,文件描述符以及进程的ID。而线程共享一个数据空间,文件描述符以及进程ID。一些重要概念:1.共享数据空间多个线程可以轻易地读取到这个共享的数据集。在读取...
  • mfc 线程与进程

    2014-04-28 18:54:03
    一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。 线程是操作系统分时调度分配CPU时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并发...
  • 线程与进程区别

    2013-06-30 12:40:57
    2、进程是一个静态的概念,一个进程里面实际上运行的是线程 区别: 1、每个进程都是独立的代码和数据空间(进程的上下文)、内存空间,进程之间的切换会有较大的开销; 2、线程可以看成是轻量级的进程,同一...
  • 线程与进程

    2011-01-16 11:16:00
    线程技术有何优越性[ 2007-11-19 17:04:00 | By: 扬扬 ] 0推荐多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程....进程与线程的概念进程是可以其他程序并发执行的一次执行过程
  • 线程与进程概念与应用

    千次阅读 2019-02-22 07:50:17
    进程:资源分配的最小单位 线程:程序执行的最小单位 线程开启 方法一:定义类继承Thread,重写run方法 优点:直接使用Thread类中的方法,代码简单 缺点:如果已经有了父类,就不能用这种方法 class MyThread extends ...

空空如也

1 2 3 4 5 ... 20
收藏数 37,361
精华内容 14,944
关键字:

线程与进程