-
操作系统 --- 进程间常用的通信方式有哪些
2020-03-09 17:15:01IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 一、管道 管道,通常指无名管道,是 UNIX 系统IPC最古老的...进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。
IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。
一、管道
管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。
1、特点:
1>它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
2>它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
3>它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
二、FIFO
FIFO,也称为命名管道,它是一种文件类型。
1、特点
1>FIFO可以在无关的进程之间交换数据,与无名管道不同。
2>FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。
三、消息队列
消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
1、特点
1>消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
2>消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
3>消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
四、信号量
信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
1、特点
1>信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
2>信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
3>每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
4>支持信号量组。
五、共享内存
共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。
1、特点
1>共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
2>因为多个进程可以同时操作,所以需要进行同步。
3>信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
-
面试题2:进程间常用的通信方式有哪些?
2018-07-31 22:03:19IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。 一、管道 管道,通常指无名管道,是 UNIX 系统IPC最古老的...进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。
IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。
一、管道
管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。
1、特点:
-
它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
-
它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
-
它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
二、FIFO
FIFO,也称为命名管道,它是一种文件类型。
1、特点
-
FIFO可以在无关的进程之间交换数据,与无名管道不同。
-
FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。
三、消息队列
消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
1、特点
-
消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
-
消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
-
消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
四、信号量
信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
1、特点
-
信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
-
信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
-
每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
-
支持信号量组。
五、共享内存
共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。
1、特点
-
共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
-
因为多个进程可以同时操作,所以需要进行同步。
-
信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。
-
-
机器人中常用的通信方式--套接字
2018-06-16 09:11:08题记:机器人中常用的通信方式有3种,tcp通信,udp通信,can通信 1、套接字(socket) 1.1、什么是socket socket是一种通信机制,可以应用于计算机不同进程之间通信,包括同一台计算机和网络中不同计算机之间的...题记:机器人中常用的通信方式有3种,tcp通信,udp通信,can通信
1、套接字(socket)
1.1、什么是socket
socket是一种通信机制,可以应用于计算机不同进程之间通信,包括同一台计算机和网络中不同计算机之间的进程之间通信,结果就是支持分布在网络中的各个服务端/客户端的通信。
socket的字面意思是插座,插座的作用提供电源,也就是所谓的服务端,相应的插头是客户端,插头插到插座里,联通得到相应的电压,也就是获得相应通信连接。
需要注意的是:socket一旦建立连接,通信是双向通信。
1.2 socket连接方式
socket连接方式用以下步骤来说明。
服务端:
1)创建socket,也就是创建服务端(插座)
2)服务器进程给套接字命名,调用blind函数
3)服务器进程监听客户端的请求连接队列,调用listen函数
4)服务器进程接受客服连接,调用accept函数,此时程序创建一个新的套接字专门处理一个客户连接,2)步骤的命名的套接字继续用来监听客户连接,一旦调用accept,则继续创建新的套接字。
客户端:
1)创建一个未命名的套接字(插头)
2)命名客户端套接字,根据服务端信息来命名客户端套接字
3)指定服务器端地址(找到插座地址),调用connect函数,建立连接本地客户端的例子:
client.c//必要的头文件 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <sys/un.h> #include <unistd.h> #include <stdlib.h> int main(){ //1)设置变量 int sockfd;//用来装载创建套接字的结果 int len; struct sockaddr_un address;//用来装载服务端给定的地址 int result;//用来装载是否连接成功的结果1表示成功,-1表示失败 char ch='A'; //2)创建客户端套接字 sockfd=socket(AF_UNIX,SOCK_STREAM,0); //3)根据服务端,给套接字命名 address.sun_family=AF_UNIX; strcpy(address.sun_path,"server_socket"); len=sizeof(address); //4)连接到服务端套接字 result=connet(sockfd,(struct sockaddr*)&address,len); if(result==-1){ perror("oops:client1"); exit(0); } //5)通过套接字进行读写操作 write(sockfd,&ch,1);//通过套接字,修改了ch变量 read(sockfd,&ch,1);//通过套接字,读取了ch变量 printf("char from server=%c\n",ch); close(sockfd);//用完套接字后关闭 exit(0); }
下面给出一个本地服务端的标准例子
server1.c//必要的头文件 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <sys/un.h> #include <unistd.h> #include <stdlib.b> int main(){ //1)创建必要的变量 int server_sockfd,client_sockfd;//分别用来装载创建的套接字的值 int server_len,client_len;//套接字地址的长度 struct sockaddr_un server_address;//装载套接字地址 struct sockaddr_un client_address; //2)删除以前的套接字,创建一个未命名的套接字 unlink("server_socket"); server_sockfd=socket(AF_UNIX,SOCK_STREAM,0); //3)命名套接字 server_address.sun_family=AF_UNIX; strcpy(server_address.sun_path,"server_socket"); server_len=sizeof(server_address); blind(server_sockfd,(struct sockaddr*)&server_address,server_len); //4)创建连接队列,等待客户进行连接 listen(server_sockfd,5);//监听队列为5 while(1){ char ch; printf("server wating\n"); //服务端接受一个连接 client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr*)&client_address,&client_lent); //6)对接受的客户端的套接字进行读写 read(client_sockfd,&ch,1); ch++; write(client_sockfd,&ch,1); close(client_sockfd);//用完套接字后需要关闭 } }
-
传值通信的多种方式_组件的常用通信方式。。。今天听课备受打击
2020-12-12 04:18:04今天就给大家分享一下组件的通信方式吧。propseventbusvuex事件:1.$parent2.$childern3.$root4.refs(这个应该是大家比较常用的)5.provide/inject (事件注入,用于祖先对后代的数据传递)组件通信:props(父传子)//...总的来说,做前端已经有大概两年了。想往web全栈的方向发展一下,结果去网上找了一些资源,听完课被虐的体无完肤。今天就给大家分享一下组件的通信方式吧。
- props
- eventbus
- vuex
事件:
1.$parent
2.$childern
3.$root
4.refs(这个应该是大家比较常用的)
5.provide/inject (事件注入,用于祖先对后代的数据传递)
组件通信:
- props(父传子)
//子 props:{msg:String} //父 <Parent msg=",人狠话不多,我是你爸爸"></Parent>
- 自定义事件
//子 this.$emit('add',good) //父 <Parent @add="sonAdd($event)"></Parent>
- 事件总线
事件总线主要是用于任意组件之间传值,和VueX的方式相同。
//事件派发,监听,回调 class Bus { constructor(){ this.callbacks = {} } $on(name,fn){ this.callbacks[name] = this.callbacks[name] || [] this.callbacks[name].push(fn) } $emit(name,args){ if(this.callbacks[name]){ this.callbacks[name].forEach(item=>{item(args)}) } } } //main.js Vue.prototype.$bus = new Bus() //子n this.$bus.$on('foo',handle) //子n+1 this.$bus.$emit('foo')
- VueX
至于VueX大家可以去官网看一下官方文档。这里就不在赘述。
- $parent/$root
//brother1 this.$parent.$on('foo',handle) //brother2 this.$parent.$emit('foo')
- $children
//父组件可以通过$children来访问子组件 this.$children[n].xx = '***' 但是这个n并不是按照组件在dom中的先后顺序来确定的,这个值不大确定
- $refs 这个也不说了,这个估计大家用的和熟悉了
说一句吧,有时候通过$refs.XXXX获取数据,可能会是undefined ,
//通过这种方式获取就可以了 this.$nextTick(()=>{ this.$refs.XXX })
- provide/inject
这是可以实现祖先和任意后代传值的
//祖先 provide(){ return{foo:'foo'} } //后代 inject:['foo']
最近在研究组件的封装,以及各大框架的源码,有兴趣的可以在评论下面大家一起研究。
-
ui线程与工作线程的通信有两种常用的方式
2019-04-08 20:28:00ui线程与工作线程的通信有两种常用的方式 1:AsyncTask(异步任务) 特点:框架成熟,按照框架要求填写代码即可。将工作线程(耗时操作)放在doinbackground方法中,在dopostexcture方法中更新ui界面 要求,理解三个... -
Vue组件常用的六种通信方式
2019-11-22 17:13:37Vue.js 组件实例的作用域是相互独立的,不同组件之间的数据不能互相访问,组件有父级组件、子级组件、兄弟组件,如何选择组件之间的通信方式?针对常用的 props、$emit/$on、vuex、$parent/$children、$attrs/$... -
实现线程间的通信常用的两种方式
2020-11-01 16:33:55实现线程间的通信常用的几种方式 线程间通信模型有两种:共享内存和消息传递 题目:有两个线程A、B,A线程向一个集合里面依次添加元素"abc"字符串,一共添加十次,当添加到第五次的时候,希望B线程能够收到A线程的... -
通信开关电源整流器常用的几种散热方式
2020-07-16 12:52:07通信开关电源冷却技术的设计首先要是满足行业各项技术性能要求。为更加适应通信机房的特殊环境使用环境,要求其冷却方式对环境温度...目前整流器常用的冷却方式有自然冷却、纯风扇冷却、自然冷却和风扇冷却相结合三种。 -
vue组件间通信常用的六种方式
2020-07-19 15:26:23vue组件间通信常用的几种方式 ...针对不同的使用场景,如何选择行之有效的通信方式?这是我们所要探讨的主题。本文总结了vue组件间通信的几种方式, 如 props/$emit、 $emit/$on、 vuex、 v- -
组件的常用通信方式。。。今天听课备受打击
2020-08-27 23:34:17今天就给大家分享一下组件的通信方式吧。 props eventbus vuex 事件: 1.$parent 2.$childern 3.$root 4.refs(这个应该是大家比较常用的) 5.provide/inject (事件注入,用于祖先对后代的数据... -
125w短波通信距离_应急通信车的常用通信手段有哪些?
2021-01-01 15:58:09一、应急通信车的常用通信手段1.1 集群通信集群通信是由早期的点对无线电对讲机发展而来的,后经历了由模拟集群通信系统到今天基于信令通道的数字集群通信方式的发展过程。其具有调度、组呼以及快速呼叫等优点,已... -
Linux进程间通信的常用方式
2019-06-21 14:37:57共享内存实现进程间的通信4.有关于ipcs -q/m/s和ipcrm -q/m/s的用法 1.pipe匿名管道实现进程间通信 关于进程间通信的相关概念,请点击这里 pipe实现进程间通信 #include <stdio.h> #include <unistd.h> #... -
详解Linux中进程间的常用通信方式
2014-11-29 12:16:331、管道(Pipe)及有名...信号是在软件层次上对中断机制的一种模拟,它是一种比较复杂的通信方式,用于通知进程有某事件发生;一个进程收到一个信号与处理器收到一个终端请求的效果是一样的。 3、消息队列(Message Que -
Android常用的组件间通信方式
2016-07-26 11:34:34使用条件:只要有Context即可。优点:发送方的Context可以是非UI组件的,而EventBus就不可以。适用场景是:后台收到服务端的推送消息后,多个相关页面要刷新页面或显示未读小红点。 使用方法: 2.1发送方: Intent -
uar通信有哪些通信方式_智慧灯杆有哪些通信方式
2021-01-05 23:07:03智慧灯杆的解决方案有很多种通信方式,目前的主流通信方式是以光纤、RJ45网络口、RS485为代表的有线通信方式,也常根据实际应用需求搭建4G/5G等方式的无线通信渠道,以下介绍几种常用的有线和无线通信方式。... -
常用的通信协议
2014-04-06 20:29:00随着网络的发展,不同 的开发商开发了不同的通信方式。为了使通信成功可靠,网络中的所有主机都必须使用同 一语言,不能带有方言。因而必须开发严格的标准定义主机之间的每个包中每个字中的每 一位。这些标准来自于... -
发布-订阅消息常用通信方式
2020-03-10 10:11:13二进制通信方式 常见的有MQTT。。。参考https://blog.csdn.net/qq_19004627/article/details/79802685 未完待续 -
Vue组件通信常用的的几种方式
2020-07-18 17:14:52Vue组件通信的四种方法 一. 父传子:主要通过props来实现 具体实现:父组件通过 import 引入子组件,并注册,在子组件标签上添加要传递的属性,子组件通过 props 接收,接收有两种形式: 一是通过数组形式[‘要接收... -
rs232转usb驱动_条码器除了USB还有哪些常用的通信方式(接口类型)?
2020-12-04 06:18:32有线条码器通常使用一条线材连接条码器和上位机设备进行数据通信,根据通信协议的不同,通常可以分为:USB接口,串口接口,键盘口接口以及其他类型接口。而无线条码器也可以根据无线传输协议分为下面几类:无线2.4G... -
VUE组件通信深入一:八大常用通信方式
2019-08-18 15:24:45现在VUE的传值的主要方式有: params与query传值方式 props down 与 event up传值(props下发event上传) provide 和 inject方式 slot内容分发,也可以传值 eventBus第三方bus的传值方式 vuex全局状态实现传值 localsto... -
9针串口改usb_条码器除了USB还有哪些常用的通信方式(接口类型)?
2021-01-15 10:17:46有线条码器通常使用一条线材连接条码器和上位机设备进行数据通信,根据通信协议的不同,通常可以分为:USB接口,串口接口,键盘口接口以及其他类型接口。而无线条码器也可以根据无线传输协议分为下面几类:无线2.4G... -
通信开关电源整流器几种常用散热方式
2020-10-17 22:43:58通信开关电源的技术研究要进一步的加快进程,因为现在不同的行业对电源开关有不同的要求,但是目前的通信工程研究需要特殊的冷却方式来适应机房环境,所以我们首先要了解整流器常用的冷却方式有哪些,然后再根据工业... -
8.4 Vue组件常用的7种通信方式——第8章 Vue组件进阶
2020-06-04 16:40:07Vue组件间通信方式有以下7种,已经学习过的不在此讲解了: 1、父子props和$emit通信:父向子通过props传值;子向父通过events ($emit)事件传值,代码示例中多次用到,不再讲解。 2、$attrs和$listeners方式通信 ... -
内核知识第七讲,内核中设备常用的三种通信方式,以及控制回调的编写
2018-01-16 22:40:00内核知识第七讲,内核中设备常用的三种通信方式,以及控制回调的编写 一丶ring3和ring0下的三种通讯方式 ring3和ring0下有常用三种通信方式: 1.缓冲区通信方式 2.直接IO通信方式 3.其它通信方式 缓冲区通信方式 ... -
常用的几种进程通信方式的比较
2010-11-05 21:54:00<br /> 文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。... 应用程序有三种方法来使多个进程共享一 -
进程间的通信方式及线程间的通信方式
2020-02-14 21:29:06现在比较常用的方式有:管道、消息队列、信号量、信号、共享内存、套接字 0X02 管道 管道主要包括无名管道和命名管道 管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功... -
常用串行通信
2017-06-21 11:11:00串行通信的速度较并行低,但是非常节省端口资源,所以是底层经常接触到的通信方式。 本文分为4部分 1、RS232串口通信 2、I2C通信 3、SPI通信 4、CAN通信 一、RS232串口通信 二、I2C通信 在I2C通信中,每个...