zoukankan      html  css  js  c++  java
  • 线程和进程的异同?

    1. 线程与进程的差别:
      • 地址空间和其它资源:进程间相互独立,同一进程间各线程共享。某进程内的线程对其它进程不可见
      • 通信:进程间通信IPC,线程间可以读写进程的数据段来进行通信----需要进程同步和互斥手段的辅助,以保证数据的一致性。
      • 调度和切换:线程的调度和上下文切换比较快
      • 进程间是相互独立的,这表现在内存空间,上下文;线程运行在进程的空间内;
      • 同一进程中的两段代码不能够同时进行,除非引入线程;
      • 线程是属于进程的,当进程退出的时该进程所产生的线程都会强制退出并清楚,线程占用的资源要少于进程所占用的资源。
      • 进程和线程可以有优先级。
      • 进程间可以通过IPC通信,但线程不可以。
      • 进程是资源分配的最小单位,线程是独立调度和执行的基本单位。
      • 一个程序至少有一个进程,一个进程至少有一个线程.
      • 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
      • 在linux操作系统中,线程是在内核外实现的,进程实在内核中实现的。
    2. 进程
      • 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。

      • 进程是程序的一次执行。

      • 进程间是相互独立的,这表现在内存空间,上下文;

      • 进程间主要的通信方式有:管道,有名管道、消息队列、信号量、共享内存;除此之外还有信号和套接字;

        • 1 管道(pipe)管道是一种半双工的通信方式,数据只能单方向流动;而且只能在具有亲缘关系的进程间使用;
        • 2 有名管道(named pipe):有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间进行通信;
        • 3 信号量(semophone): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,因此主要作为进程间通信以及同一进程内不同线程之间的同步手段;
        • 4 消息队列(message queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息量少、管道只能承载无格式字节流以及缓冲区大小受限的缺点;
        • 5 信号:signal 信号是一种比较复杂的通信方式,用于通知接收进程某个时间已经发生、
        • 6 共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建但是多个进程可以访问。共享内存是最快的IPC通信方式,它是针对其它进程通信运行效率低专门设计的。它往往与其它通信机制,如信号量,配合使用,来实现进程间的同步与通信;
        • 7 套接字:socket 套接口也是一种进程间通信机制,与其它通信机制不同的的是,它可用于不同机器间的进程通信;
      • IPC 是进程间通信 Internet process connection 编程技术;

    3. 线程
      • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
      • 线程运行在进程空间内;
      • 线程同步中,最常用的有互斥锁:条件变量和异步信号;
        • 1 互斥锁通过锁机制来实现线程间的同步。在同一时刻它通常允许一个线程执行一个关键部分的代码;
        • 2 条件变量是利用线程间共享的全局变量进行同步的一种机制。条件变量宏观上和类似if语句;符合条件就能执行某段程序,否则只能等待条件成立;使用条件变量包括两个动作:一个等待使用资源资源的线程等待“条件变量设置为真”;另一个线程在使用完资源后“设置条件为真”,这样就可以保证线程间的同步了;这样就存在一个关键问题,就是要保证套件变量能被正确的修改,条件变量要受到特殊的保护,实际使用中互斥锁扮演着这样的角色;
        • 3 线程同进程一样也可以接收和处理信号,信号也是线程间同步的俄译中手段;
    4. 进程与线程的通信方法总结 (1) 进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等
      (2) 事件、临界区、互斥量、信号量可以实现线程同步
    CopyRight @Widic 2017 Mail:widicjane@163.com
  • 相关阅读:
    Math Jax开源数学编辑器的使用
    阿里云pai项目使用说明
    tomcat管理授权:tomcat-users.xml
    NoSQLBooster for MongoDB的基本使用
    IDEA的配置文件访问
    task
    Netty基础点滴
    二星权限树的设计与实现
    easyui实现树形菜单Tab功能、layout布局
    如何用Dome4j(2.2.1)创建Xml
  • 原文地址:https://www.cnblogs.com/widic/p/7384276.html
Copyright © 2011-2022 走看看