进程间通信
文章平均质量分 92
旅之灵夫
【授人以渔】
【要站在巨人的肩上】
【没有做不到,只有想不到】
【人的脑子是一个有限的空间,所以必须选择性的吸收知识,而不能把什么东西都放进去。--柯南·道尔】
展开
-
【原来这才是 Socket!】【转载】
这篇文章我们来聊一下 Socket。关于对 Socket 的认识,大致分为下面几个主题,Socket 是什么,Socket 是如何创建的,Socket 是如何连接并收发数据的,Socket 套接字的删除等。原创 2024-02-24 22:42:30 · 849 阅读 · 0 评论 -
【图解 Linux | 管道通信的原理?】【转载】
处于安全的考虑,不同进程之间的内存空间是相互隔离的,也就是说进程A是不能访问进程B的内存空间,反之亦然。如果不同进程间能够相互访问和修改对方的内存,那么当前进程的内存就有可能被其他进程非法修改,从而导致安全隐患。不同的进程就像是大海上孤立的岛屿,它们之间不能直接相互通信,如下图所示:进程A负责处理用户的请求,而进程B负责保存处理后的数据。那么当进程A处理完请求后,就需要把处理后的数据提交给进程B进行存储。此时,进程A就需要与进程B进行通信。原创 2024-02-23 06:54:50 · 928 阅读 · 0 评论 -
【TCP粘包 | 硬核图解】【转载】
那么当李东在手机上键入"李东""亚健康终结者"的时候,在 TCP 中把消息分成 MSS 大小后,消息顺着网线顺利发出。发送消息到网络网络稳得很,将消息分片传到了对端手机 B 上。经过 TCP 层消息重组。变成"李东亚健康终结者"这样的字节流(stream)。消息从网络接收但由于聊天软件琛琛是新开发的,而且开发者叫小白,完了,是个臭名昭著的造 bug 工程师。经过他的代码,在处理字节流的时候消息从"李东","亚健康终结者"变成了"李东亚","健康终结者"。原创 2024-02-22 22:12:21 · 910 阅读 · 0 评论 -
【信号量】
信号量(Semaphore)是多线程或多任务环境中用于控制对共享资源的访问的一种机制。它允许多个线程或任务同时访问某些共享资源,但在进入共享资源的临界区之前,需要获取信号量。当一个线程或任务尝试访问共享资源时,它首先会检查信号量的值。如果信号量的值为0,则该线程或任务会被阻塞,直到信号量的值变为大于0。一旦线程或任务获得了信号量(即信号量的值大于0),它就可以访问共享资源。在完成对共享资源的访问后,线程或任务会释放信号量,使其他等待的线程或任务可以继续执行。原创 2024-01-22 14:40:28 · 859 阅读 · 0 评论 -
【IPC通信--共享内存mmap】
mmap共享内存机制是一种高效的进程间通信方式,可以实现多个进程之间的数据共享。它利用虚拟内存的特性,将文件或者设备映射到内存中,实现了数据的实时共享。通过使用mmap,可以提高程序的效率和响应速度,适用于需要大量数据交换的场景。共享内存映射之mmap()函数详解_51CTO博客_内存映射mmap深入理解内存映射:mmap映射的背后原理以及和共享内存的差异 - 知乎 (zhihu.com)原创 2024-01-16 15:06:57 · 1323 阅读 · 0 评论 -
【IPC通信--共享内存】
该函数被调⽤⼀次,但返回两次。fork之后,操作系统会复制⼀个与⽗进程完全相同的⼦进程,虽说是⽗⼦关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独⽴的,⼦进程数据空间中的内容是⽗进程的完整拷贝,指令指针也完全相同,⼦进程拥有⽗进程当前运⾏到的位置(两进程的程序计数器pc值相同,也就是说,⼦进程是从fork返回处开始执⾏的),但有⼀点不同,如果fork成功,⼦进程中fork的返回值是0,⽗进程中fork的返回值是⼦进程的进程号,如果fork不成功,⽗进程会返回错误。原创 2024-01-15 20:59:59 · 1479 阅读 · 0 评论 -
【原子操作】
原子操作是操作系统中的重要概念,它保证了在多线程或者并发执行的环境下,对共享资源的操作能够正确、完整地进行。原子操作通过保证操作的原子性,保证了数据的一致性,防止了竞态条件的发生。通过使用原子指令、锁机制或者原子变量,可以实现对共享资源的原子操作。在实际应用中,原子操作被广泛应用于信号量和互斥锁、原子计数器以及数据库事务等场景。通过合理地使用原子操作,可以保证系统的稳定性和数据的正确性。原创 2024-01-08 09:37:04 · 1081 阅读 · 0 评论 -
【IPC通信--socket套接字--心跳包】
随着网络通信技术的不断发展,网络通信已成为我们日常工作和生活中不可或缺的一部分。但是在使用网络通信的过程中,时常会遇到网络延迟、丢包等问题,这些问题不仅影响我们的工作和生活效率,也会给我们的网络带来一定的风险和安全隐患。为了解决这些问题,Socket 心跳包成为了一种有效的方法,可以提高网络通信的稳定性,从而提升我们的工作效率,减少风险和安全隐患。原创 2024-01-07 22:07:09 · 1559 阅读 · 0 评论 -
【IPC通信--消息队列】
消息队列(也叫做报文队列)是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。IPC消息队列资源的限制IPC消息队列的缺省数为16每个消息的缺省最大值8192字节队列中全部信息的缺省大小为16384字节。原创 2024-01-07 11:46:19 · 1507 阅读 · 0 评论 -
【IPC通信--信号】
* 触发fault的内存地址,对SIGILL,SIGFPE,SIGSEGV,SIGBUS 信号有意义*//* 发送信号进程的真实用户ID,对kill(2),实时信号以及SIGCHLD有意义 *//* 信号值,对所有实时有意义,是一个联合数据结构,/* 信号产生的原因,对所有信号有意义*//*可以为一个整数(由si_int标示,也可以为一个指针,由si_ptr标示)*//* 信号值,对所有信号有意义*//* 发送信号的进程ID,对实时信号以及SIGCHLD有 意义 */原创 2024-01-06 13:04:44 · 990 阅读 · 0 评论 -
【进程间通信】
进程通信( InterProcess Communication,IPC)就是指进程之间的信息的传播和交换。进程是分配系统资源的单位,包括内存地址空间,为了保证安全,一个进程不能直接访问另一个进程的地址空间,如下图。因此各进程拥有的内存地址空间相互独立。但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通道,操作系统提供了一些方法。那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。原创 2024-01-04 17:29:10 · 925 阅读 · 0 评论