前言:

腾讯笔试中多道选择题考到这个问题,这里总结一下。学习Java的童鞋可能对于线程的理解要比学php好很多。本文参考于线程通信与进程通信的区别 。

进程和线程的区别:

对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品。

而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其他线程之间直接共享数据,而且拥有自己的栈空间,拥有独立序列。

共同点: 它们都能提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点。 线程执行开销比较小,但不利于资源的管理和保护,而进程相反。同时,线程适合在SMP机器上运行,而进程可以跨机器迁移。

他们之间根本区别在于 多进程中每个进程有自己的地址空间,线程则共享地址空间。所有其他区别都是因为这个区别产生的。比如说:
1. 速度。线程产生的速度快,通讯快,切换快,因为他们处于同一地址空间。
2. 线程的资源利用率好。
3. 线程使用公共变量或者内存的时候需要同步机制,但进程不用。

而他们通信方式的差异也仍然是由于这个根本原因造成的。

通信方式之间的差异

因为那个根本原因,实际上只有进程间需要通信,同一进程的线程共享地址空间,没有通信的必要,但要做好同步/互斥,保护共享的全局变量。

而进程间通信无论是信号,管道pipe还是共享内存都是由操作系统保证的,是系统调用.

一、进程间的通信方式

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

二、线程间的通信方式

  1. 锁机制:包括互斥锁、条件变量、读写锁

    • 互斥锁提供了以排他方式防止数据结构被并发修改的方法。
    • 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
    • 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
  2. 信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
    信号机制(Signal):类似进程间的信号处理

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

线程通信和进程通信区别(线程进程区别)相关推荐

  1. 操作系统4小时速成:进程管理占考试40%,进程状态,组织,通信,线程拥有调度,进程拥有资源,进程和线程的区别

    操作系统4小时速成:进程管理占考试40%,进程状态,组织,通信,线程拥有调度,进程拥有资源,进程和线程的区别 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去 ...

  2. 进程和线程的概念、区别及进程线程间通信

    进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1. 基本概念: 进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发: 线程是进程 ...

  3. Windows线程同步机制的区别与比较及进程通信方法

    原文:http://blog.csdn.net/eulb/article/details/2177500 多线程同步机制 (Windows) 线程的同步机制: 1.   Event 用事件(Event ...

  4. Android进程框架:线程通信的桥梁Handler

    关于作者 郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的Github提issue或者发邮件至guoxiaoxingse@163.com与我交流 ...

  5. Python之路 34:并发与并行、锁(GIL、同步锁、死锁与递归锁)、信号量、线程队列、生消模型、进程(基础使用、进程通信、进程池、回调函数)、协程

    内容: 同步锁 死锁.递归锁 信号量和同步对象(暂时了解即可) 队列------生产者和消费者模型 进程(基础使用.进程通信.进程池.回调函数) 协程 一.并发并行与同步异步的概念 1.1.并发和并行 ...

  6. (转)C++进程间和线程间通信

     进程间和线程间通信(原文章出自http://blog.sina.com.cn/s/blog_4a93ccea0102ea1w.html) 1.许多程序和应用一起工作达到某个共同目的的任务集.每个 ...

  7. Linux进程通信和线程通信

    1.进程和线程是什么 简单的描述:进程好比是工厂,线程是工厂里的生产线,一个进程里面可以包含多个线程.  专业术语:进程是cpu资源分配的最小单位,线程是cpu调度的最小单位. 每个进程都有独立的代码 ...

  8. Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来,Linux ...

  9. linux 进程和线程或线程和线程之间通过管道通信(pipe)

    linux 进程和线程或线程和线程之间通过管道通信(pipe) 转自:http://blog.csdn.net/robertkun/article/details/8095331 线程间通信: [cp ...

最新文章

  1. oracle表空间的创建及dmp 文件的导入
  2. javaSocket与C通信
  3. 燕京理工学院java期末_英华学堂燕京理工学院的答案
  4. php装curl拓展出错
  5. 情人节——vbs的学习(句子、情话)
  6. Windows和Mac系统上常用的MySQL客户端工具
  7. 两款扒站工具使用说明
  8. 智慧体检中心管理系统降低管理成本提高管理效率
  9. 华东师范 2018年 研究生复试上机题解合集
  10. 日语学习的实用网址大全!
  11. 自定义ListView实现任意View跑马灯效果
  12. 实测中国版Afterpay:上市就被套现大军盯上,中介费率高达50%
  13. 物体识别,Win7下运行TensorFlow Object Detection API详细版教程(零基础操作)
  14. js jQuery方法join()
  15. C语言操作SQLite3简明教程
  16. Bingo说说:虚拟产品项目玩法解析,新手也能操作的暴利赚钱术
  17. vue3中的ref,toRef,toRefs三个的作用
  18. 一台电脑两个音频输出
  19. Oracle 电子期刊下载
  20. 【JOI 2015 Final】铁路旅行

热门文章

  1. 独家 | 19年NAACL纪实:自然语言处理的实用性见解
  2. 热烈庆祝下Air2.0版Rock506Dock beta1.0上线~
  3. NGINX 0 DAY LDAP RCE 漏洞来龙去脉
  4. Your ApplicationContext is unlikely tostart due to a @ComponentScan of the defau
  5. 高晓松的《晓说》很棒,这脑袋怎么长得?
  6. JavaScript中的强制多态 | Lynda教程 中文字幕
  7. Fully Convolutional Networks for Semantic Segmentation
  8. 计算机搜索栏无法搜索怎么办,电脑桌面搜索框无法使用失效怎么办?
  9. drf celery
  10. 【论文翻译】文本语义提取