精华内容
下载资源
问答
  • 线程间通讯方式有哪些? 一、进程间的通信方式 管道( pipe ): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道 (namedpipe) ...

    Java面试题:进程间通信的方式有哪些?线程间通讯方式有哪些?

    一、进程间的通信方式

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

    二、线程间的通信方式

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

    可参考原文链接:
    https://blog.csdn.net/liyue98/article/details/80112246
    https://blog.csdn.net/qq_33472765/article/details/82118529

    展开全文
  • 有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好。想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着”背“来记忆的,所以今天的这篇文章,讲给大家详细着...

    有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好。想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着”背“来记忆的,所以今天的这篇文章,讲给大家详细着讲解他们是如何通信的,让大家尽量能够理解他们之间的区别、优缺点等,这样的话,以后面试官让你举例子,你也能够顺手拈来。

    1、管道

    我们来看一条 Linux 的语句

    netstat -tulnp | grep 8080
    

    学过 Linux 命名的估计都懂这条语句的含义,其中”|“是管道的意思,它的作用就是把前一条命令的输出作为后一条命令的输入。在这里就是把 netstat -tulnp 的输出结果作为 grep 8080 这条命令的输入。如果两个进程要进行通信的话,就可以用这种管道来进行通信了,并且我们可以知道这条竖线是没有名字的,所以我们把这种通信方式称之为匿名管道

    并且这种通信方式是单向的,只能把第一个命令的输出作为第二个命令的输入,如果进程之间想要互相通信的话,那么需要创建两个管道。

    居然有匿名管道,那也意味着有命名管道,下面我们来创建一个命名管道。

    mkfifo  test
    
    

    这条命令创建了一个名字为 test 的命名管道。

    接下来我们用一个进程向这个管道里面写数据,然后有另外一个进程把里面的数据读出来。

    echo "this is a pipe" > test   // 写数据
    

    这个时候管道的内容没有被读出的话,那么这个命令就会一直停在这里,只有当另外一个进程把 test 里面的内容读出来的时候这条命令才会结束。接下来我们用另外一个进程来读取

    cat < test  // 读数据
    

    我们可以看到,test 里面的数据被读取出来了。上一条命令也执行结束了。

    从上面的例子可以看出,管道的通知机制类似于缓存,就像一个进程把数据放在某个缓存区域,然后等着另外一个进程去拿,并且是管道是单向传输的。

    这种通信方式有什么缺点呢?显然,这种通信方式效率低下,你看,a 进程给 b 进程传输数据,只能等待 b 进程取了数据之后 a 进程才能返回。

    所以管道不适合频繁通信的进程。当然,他也有它的优点,例如比较简单,能够保证我们的数据已经真的被其他进程拿走了。我们平时用 Linux 的时候,也算是经常用。

    2、消息队列

    那我们能不能把进程的数据放在某个内存之后就马上让进程返回呢?无需等待其他进程来取就返回呢?

    答是可以的,我们可以用消息队列的通信模式来解决这个问题,例如 a 进程要给 b 进程发送消息,只需要把消息放在对应的消息队列里就行了,b 进程需要的时候再去对应的
    消息队列里取出来。同理,b 进程要个 a 进程发送消息也是一样。这种通信方式也类似于缓存吧。

    这种通信方式有缺点吗?答是有的,如果 a 进程发送的数据占的内存比较大,并且两个进程之间的通信特别频繁的话,消息队列模型就不大适合了。因为 a 发送的数据很大的话,意味**发送消息(拷贝)**这个过程需要花很多时间来读内存。

    哪有没有什么解决方案呢?答是有的,请继续往下看。

    3、共享内存

    共享内存这个通信方式就可以很好着解决拷贝所消耗的时间了。

    这个可能有人会问了,每个进程不是有自己的独立内存吗?两个进程怎么就可以共享一块内存了?

    我们都知道,系统加载一个进程的时候,分配给进程的内存并不是实际物理内存,而是虚拟内存空间。那么我们可以让两个进程各自拿出一块虚拟地址空间来,然后映射到相同的物理内存中,这样,两个进程虽然有着独立的虚拟内存空间,但有一部分却是映射到相同的物理内存,这就完成了内存共享机制了。

    4、信号量

    共享内存最大的问题是什么?没错,就是多进程竞争内存的问题,就像类似于我们平时说的线程安全问题。如何解决这个问题?这个时候我们的信号量就上场了。

    信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。例如信号量的初始值是 1,然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0,然后进程b 也要来访问内存1的时候,看到信号量的值为 0 就知道已经有进程在访问内存1了,这个时候进程 b 就会访问不了内存1。所以说,信号量也是进程之间的一种通信方式。

    5、Socket

    上面我们说的共享内存、管道、信号量、消息队列,他们都是多个进程在一台主机之间的通信,那两个相隔几千里的进程能够进行通信吗?

    答是必须的,这个时候 Socket 这家伙就派上用场了,例如我们平时通过浏览器发起一个 http 请求,然后服务器给你返回对应的数据,这种就是采用 Socket 的通信方式了。

    总结

    所以,进程之间的通信方式有:

    1、管道

    2、消息队列

    3、共享内存

    4、信号量

    5、Socket

    讲到这里也就完结了,之前我看进程之间的通信方式的时候,也算是死记硬背,并没有去理解他们之间的关系,优缺点,为什么会有这种通信方式。所以最近花点时间去研究了一下,
    整理了这篇文章,相信看完这篇文章,你就可以更好着理解各种通信方式的由来的。

    唠叨一下,最近有点对不住各位,好久没写原创文章了。有点偷懒,哈哈。不过呢,我接下来会好好写文章的了,希望大家多多支持。

    老铁,要不点个赞再走可好?么么哒

    1、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我,嘻嘻。

    2、老铁们,关注我的原创微信公众号「帅地玩编程」,专注于写算法 + 计算机基础知识(计算机网络+ 操作系统+数据库+Linux)。

    保存让你看完有所收获,不信你打我。后台回复『电子书』送你一份精选电子书大礼包,包含各类技能的优质电子书。

    作者简洁

    作者:大家好,我是帅地,从大学、校招一路走来,深知算法计算机基础知识的重要性,所以申请了一个微星公众号『帅地玩编程』,专业于写这些底层知识,提升我们的内功,帅地期待你的关注,和我一起学习。 转载说明:未获得授权,禁止转载了。

    展开全文
  • 面对各种各样物联网通信开发的实现是比较复杂的,很多人开发一种通信方式都非常困难。如果想要一天之内将WIFI、蓝牙、Lora、NB等通讯方式搭建成功并使用,是难以想象的。但是今天就带大家怎样用一款功能强大并且编程...

    前言

    面对各种各样物联网通信开发的实现是比较复杂的,很多人开发一种通信方式都非常困难。如果想要一天之内将WIFI、蓝牙、Lora、NB等通讯方式搭建成功并使用,是难以想象的。但是今天就带大家怎样用一款功能强大并且编程及其简单的Core物联网开发板开发出这些物联网通讯,以下是几种常用的物联网通信及例程链接。

    一、Wifi+mqtt接入云平台

    MQTT是一种基于TCP的物联网通信协议,在物联网领域应用非常广泛,基本上所有的云平台都支持设备以MQTT协议接入,所以如果您的设备支持MQTT连接,就可以很容易的对接各云平台(比如ONE NET、阿里云、腾讯云等)。CORE提供的MQTT库函数也十分简单,您只需根据各云平台的规则,在调用MQTT库函数时对传入的参数做相应的调整即可对接各家云平台。具体使用代码例程:WIFI例程详情

    二、Core通过蓝牙与手机通讯

    现在几乎每个人的手机都具备蓝牙功能,所以如果你的硬件设备也具备蓝牙通信功能,那么便可以很容易和手机建立通信,从而具备IOT物联网属性。但我们也知道蓝牙Ble(目前已发展到5.2版本)协议极其复杂,并不是所有人都需要去详细了解它,我们更多的需求是能够使用它就足够了。core能够在短短几分钟内只用几行代码就可以定制出我们自己的蓝牙设备,并且基于core配套的《免开发App》,我们甚至连手机端App开发的工作都省掉了。具体使用代码例程:蓝牙例程详情
    在这里插入图片描述

    三、Lora通信

    Lora不是一种协议,而是一种基于扩频通信的射频技术,它相对于其他射频技术比如2.4G或普通433/915M来讲,具有更远的传输距离(几千米)和更强的越障性能。所以我们把一个Lora设备作为中心点,多个Lora设备作为节点可以组成一个范围达几千米的星型网络。具体使用代码例程:Lora例程详情
    在这里插入图片描述

    四、NBIOT+mqtt通信

    窄带物联网(NB-IoT)成为万物互联网络的一个重要分支。NB-IoT构建于蜂窝网络,只消耗大约180kHz的带宽,可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。
    NB-IoT是IoT领域一个新兴的技术,支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网(LPWAN)。NB-IoT支持待机时间长、对网络连接要求较高设备的高效连接。据说NB-IoT设备电池寿命可以提高至少10年,同时还能提供非常全面的室内蜂窝数据连接覆盖。 NBIOT例程详情

    五、Mesh组网

    Core在底层采用了基于 Thread无线网络的COAP协议,其实它是一个多点mesh网络通信协议,但是本例中的点对点通信只是实现了两个结点而已。
    通过了解Thread无线网络的机制应该知道,在Thread中的节点分为三类:Leader,Router,EndDevice。但请不要将它们和COAP协议中的server,client概念混淆。因为在Thread网络中的server和client节点可能是Leader,Router,EndDevice三者中的任意一种,而且还不是固定的,会随着网络的动态变化而变化,而这也体现出了Thread网络的强大之处,即网络中如果某一个路由节点出现了问题,网络其他节点会动态调整自己的角色来自愈网络。Mesh组网例程详情
    在这里插入图片描述

    展开全文
  • 同步通信方式与异步通信方式

    万次阅读 多人点赞 2019-01-06 14:20:46
    同步通信方式  以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符表示,硬件要求高,通信双方须严格同步。 同步通信格式:数据以“块”为单位,一个数据块包括同步字符、数据及校验字符...

    同步通信方式

           以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符表示,硬件要求高,通信双方须严格同步。

    同步通信格式:数据以“块”为单位,一个数据块包括同步字符、数据及校验字符CRC。

    通信连线通常采用三线制:

    SDA(信号线)、SCL(时钟线)、GND(地线)

    优点是数据传输速率较高,常用作串行系统总线(内总线),如I2C、SPI、USB等;缺点是硬件上要求发送时钟和接收时钟保持严格同步。

     

    异步通信方式

    以字符为传送单位,用起始位和停止位标识每个字符的开始和结束字符,间隔不固定,只需字符传送时同步

    异步通信格式如下图

    (1)没有数据发送时,数据线保持"1"状态。

    (2)发送数据时,先发起始位“0”,其后是数据位,异步传送规定低位在前,高位在后

    (3)奇偶位紧跟在数据最高位之后,占用一位(也可省去)

    (4)数据发送完后,再发一位停止位“1”,表示一帧数据结束,同时为接收下一帧数据做准备。在下一帧的起始位“0”到来之前,都是默认的“1”

    通信协议:(1)发送、接收双方的通信速率必须一致。(2)通信双方的数据帧格式必须一致

    优点:不需要传送同步脉冲,可靠性高,所需设备简单适合远距离通信,常用作串行通信总线(外总线),如RS232、RS485等

    缺点:数据中包含有起始位和停止位以实现同步,从而降低了有效数据的传输速率。

    展开全文
  • 线程间通讯方式

    2019-06-04 16:09:41
    线程间通讯方式 1:同步(synchronized) 2:wait/notify()机制 3:管道通信就是使用java.io.PipedInputStream 和 java.io.PipedOutputStream进行通信 进程间通讯方式 ... ...
  • 物联网通信方式

    千次阅读 热门讨论 2020-12-07 00:27:16
    物联网通信方式 要想实现物联网,我们面临的首要问题是:如何将设备接入互联网?这个问题的着重点在于我们的设备和物联网云平台的通信方式是什么。 以下将如一列出物联网通信方式的分类和划归,并在树状图的最后作出...
  • SPI通信方式

    2019-09-10 11:17:08
    SPI通信方式一般4线,可实现单工双向通信;3线可实现单向通信。 MOSI(SDO):主设备输出数据,从设备输入数据线。 MISO(SDI):主设备输入数据,从设备输出数据线。 SCLK:主设备产生的时钟信号线。 CS(SS)...
  • 一、linux下进程间通信的几种主要手段简介: ... 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支...
  • 通信方式、通信接口、通信总线、通信协议的关系
  • 刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程...通信方式和报文格式的多样性上。  一。通信方式  主要有以下三大类:  (一)SERVER/CLIENT方式  1.一个Client方连接一个Server方
  • 串口通讯—异步通信方式

    千次阅读 2013-03-14 12:33:26
    串口通讯—异步通信方式   串行通信可以分为两种类型:同步通信、异步通信。 1.异步通信的特点及信息帧格式: 以起止式异步协议为例,下图显示的是起止式一帧数据的格式: ...
  • 串口通讯—同步通信方式

    千次阅读 2015-06-28 18:55:05
    1、同步通信方式的特点: 采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为...
  • Android 通信方式

    千次阅读 2018-08-21 10:26:18
    最常用的通信方式是Binder、Socket、Handler,当然也有少量其他的IPC方式,比如杀进程Process.killProcess()采用的是signal方式。 1. Binder Binder通信采用c/s架构,从组件视角来说,包含Client、Server、...
  • 进程间的通讯方式

    千次阅读 2020-08-28 22:23:45
    进程间通信的方式有? 进程间的通信方式有管道,socket,消息队列,信号,信号量,共享内存 Linux多线程同步的几种方式 ? 互斥量,条件变量,信号量,读写锁,自旋锁
  • 随着人们对自然的认识,先后有烽火台、邮驿、书信、电报、电话、卫星、微波、短波、互联网等通信方式。目前来看,只剩下电话、收音机、对讲机算是比较原始的通信方式了,其他方式逐渐被时代淘汰。在突发事件发生时,...
  • 四种通信方式

    千次阅读 2020-11-16 09:45:48
    以太网是一种基带局域网技术,以太网通信是一种使用同轴电缆作为网络媒体,采用载波多路访问和冲突检测机制的通信方式,数据传输速率达到1Gbit/s,可满足非持续性网络数据传输的需要 比较通用的通讯协议是tcp/ip协议...
  • java进程通信方式

    千次阅读 2019-08-26 18:24:43
    以下是常用的进程间通信方式。 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(半双工:数据传输...
  • 串口通讯—同步通信方式

    千次阅读 2010-12-01 09:07:00
    <br />串口通讯—同步通信方式 1. 同步通信方式的特点: 采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为帧)的开始要加上同步字符,在...
  • 线程间通信方式3:消息传递方式

    热门讨论 2013-01-18 11:01:23
    线程间通信方式3:消息传递方式的演示。采用计算演示线程的执行,并采用用户界面线程来实时显示执行的进度,线程间的通信方式采用了3种方式相结合,对多线程间的通信有比较好的学习和研究价值。
  • 进程之间通信方式 (1) 管道(PIPE) (2) 命名管道(FIFO) (3) 信号量(Semphore) (4) 消息队列(MessageQueue) (5) 共享内存(SharedMemory) (6) Socket Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,...
  • IPC通信方式

    千次阅读 2015-08-15 13:35:48
    ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在父子进程间通信。管道的缓冲区是有限的(管道存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节流,要求管道的读出...
  • 进程间8种通信方式详解

    万次阅读 多人点赞 2016-04-20 15:34:57
    1 无名管道通信无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2 高级管道通信高级管道(popen):将另一个程序当做一...
  • 总线的异步通讯方式

    千次阅读 2019-02-26 15:28:21
    总线的异步通讯方式
  • 进程通信概念和进程通信方式

    万次阅读 2017-05-08 19:11:01
    进程通信(IPC,Inter-Porcess Communcation)是进程进行通信和同步的机制。IPC提供两个基本操作: ...进程通信方式: 直接通信: 进程必须正确命名对方,比如send(p,message)向p发送信息,receiv
  • 进程之间的通信方式

    千次阅读 2018-07-09 22:00:33
    有管道、信号、消息队列、共享内存、socket、信号量。管道一个进程向存储空间的一端...信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程...
  • 1.摘要 Android手机间通过蓝牙方式进行通信,有两种常见的方式,一种是socket方式,另一种是通过Gatt ...本文基于两种通信方式,进行详细展开,并推荐了开源项目,建议配合学习。 关键词 (1)Bluetooth 蓝牙(Blu
  • 在之前的文章中我们提到了vue常用的几种通信方式,如父子,子父,以及兄弟组件之间的通信,可以通过这个传送门了解他们:Vue通信方式(一) 当我们如果遇到祖组件,父组件,孙组件,三个级别嵌套时,我们该怎么在祖...
  • ipv6网络通信方式

    千次阅读 2018-07-05 16:27:01
    1.通常我们使用的都是ipv4的方式来进行网路编程通信,本次介绍的是ipv6方式通信方式。 直接根据代码实例来说明,以及使用中需要注意事项。 2在linux环境下,我们使用ifconfig命令查询网卡信息如下: 如上图所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,329,704
精华内容 531,881
关键字:

通信方式