sigaction如何设置
简述Linux进程间通信的几种方式?
简述Linux进程间通信的几种方式?
一、方式1、管道(Pipe)及有名管道(mkpipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
2、信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。
linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction。
实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数。
3、消息队列(Message):消息队列是消息的链接表,包括Posix消息队列systemV消息队列。
有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。
消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4、共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。
是针对其他通信机制运行效率较低而设计的。
往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
5、信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
6、套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。
起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和SystemV的变种都支持套接字。二、概念进程间通信概念:IPC—-InterProcessCommunication 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到所以进程之间要交换数据必须通过内核。
在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。扩展资料1)无名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。
管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,构成两进程间通信的一个媒介。
数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。
写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
2)有名管道:不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。
这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间)。
因此,通过FIFO不相关的进程也能交换数据。值得注意的是,FIFO严格遵循先进先出(firstinfirstout),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。
它们不支持诸如lseek()等文件定位操作。
哪些方法可以提高socket的传输效率?
“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”
socket俗称套接字,用来描述IP地址和端口,常在网络通信建立连接时使用。
如题,哪些方法可以提高socket的传输效率?
哟哟认为有三方面可以提升传输效率:
1、网络方面;
2、服务器方面;
3、程序方面;
下面哟哟来简单介绍一下具体实现:
1、网络方面就网络方面来说,主机至服务器端的链路稳定性、时延性特别重要,另外就是主机的带宽是多大,若使用千兆带宽的网速,那么在建立多个连接后,可以在一定程度上提升socket的传输效率;
2、服务器方面服务器的限速和限连接数,在一定程度上会影响socket的传输效率,因此在服务器方面提升连接用户的上下行速率和连接数,可以在一定程度上提升socket的传输效率;
3、程序方面在程序设计方面,若较大的文件用一个线程去传输就会出现很多问题,如:网络问题或主机故障造成通信中断,那么文件需要进行重新传输,严重影响传输效率。因此可以将文件分割成数据模型,开启多个线程,根据网络情况去调整每条线程传输数据的大小,实现断点续传的方式,提升socket传输效率;
欢迎大家多多关注我,在下方评论区说出自己的见解。