一、背景
在人类思想史上,马克思第一次对人的本质作出科学界定:人的本质是一切社会关系的总和。时间万物都存在或多或少的关系。那么人除了天生父子这样的家族关系unix网络编程 进程间通信,还有后天 通过 语言 ,这样区别于其他动物的方式来进行和其他人的交流产生关系。
在计算机中,单个机器或者说应用玩儿是没有意思的,只是完成了个体的语言翻译【计算机的执行本质上也是一种语言翻译的过程,通过 中间层 将 人类语言 翻译为 机器语言】。因此,网络的诞生以及进程间的通信极大丰富了计算机世界。我们下面来看看 进程间、线程间是如何通信的以及现有的网络模型有哪些?
二、进程间通信
通信是指由一地向另一地进行消息的有效传递。关键点则是 抓住 点(进程、线程、主机或集群),介质(文件、内存、管道、网线)。而进程的概念则是针对的操作系统的概念,所以研究范围则为操作系统。在现有的Linux操作系统的进程通信方式有以下几种。
分类
在理解通信之前,我们先来简单回顾一些进程的基础概念。进程是资源分配(内存、文件等资源)的基本单位,在线程未出现之前也是CPU的调度单位。在Linux的表现为 task_struct 结构体(Linux下的进程控制块PCB)。可GitHub 去搜索一下 sched.h文件看看【快捷键T 】。重点关注一下 含有的资源。
通过进程的基本属性,我们可以发现 进程 想要 和另外的进程交流 只能通过CPU的寄存器、内存、文件等公有的介质交流。
管道 基本概念
进程通信的使用例子之一是UNIX系统的管道通信。UNIX系统从System V 开始,提供有名管道和无名管道两种通信方式。
特点 消息队列(传递) 基本概念
设计一个中间层:消息队列(保存在内核中的消息链表),进行解耦,不让进程之间进行直接交互数据,通过处于运行于内核的消息链表(物理上的介质在内存层面,比文件更快)进行中转交互数据。
特点 共享内存 基本概念
为避免像消息传递的数据拷贝问题,共享内存则直接开辟进程进行交互的相同 物理 地址内存空间。
(对于进程角度来说就是拿出一块虚拟地址空间来unix网络编程 进程间通信红旗linux系统下载,映射到相同的物理内存中。
特点 信号 基本概念
对于异常情况下的工作模式,就需要用信号的方式来通知进程。
在 Linux 操作系统中, 为了响应各种各样的事件,提供了几十种信号,分别代表不同的意义。我们可以通过 kill -l 命令,查看所有的信号。
特点 网络Socket 基本概念
对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
特点 三、线程通信
线程实际上是进程的特殊形式,在Linux实现上都是task_struct。它们直接通信则直接通过共享变量全局变量进行交互linux系统iso下载,它们更多关注的是资源竞争问题。