进程间通信

Windows线程+进程通信

丶灬走出姿态 提交于 2020-03-01 08:15:48
一 Windows线程进程 1)定义 按照MS的定义, Windows中的进程简单地说就是一个内存中的可执行程序, 提供程序运行的各种资源. 进程拥有虚拟的地址空间, 可执行代码, 数据, 对象句柄集, 环境变量, 基础优先级, 以及最大最小工作集. Windows中的线程是系统处理机调度的基本单位. 线程可以执行进程中的任意代码, 包括正在被其他线程执行的代码. 进程中的所有线程共享进程的虚拟地址空间和系统资源. 每个线程拥有自己的例外处理过程, 一个调度优先级以及线程上下文数据结构. 线程上下文数据结构包含寄存器值, 核心堆栈, 用户堆栈和线程环境块. 2) 如下图: 3)线程与进程的关系 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。 在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。 4) 进程和线程的区别   (1)、进程是资源管理的基本单位,它拥有自己的地址空间和各种资源,例如内存空间、外部设备;线程只是处理机调度的基本单位,它只和其他线程一起共享资源,但自己没有任何资源。   (2)、以进程为单位进行处理机切换和调度时,由于涉及到资源转移以及现场保护等问题,将导致处理机切换时间变长,资源利用率降低

6种Linux进程间的通信方式

淺唱寂寞╮ 提交于 2020-02-29 11:32:34
进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。 进程通信的概念 进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。 进程通信的应用场景 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。 进程通信的方式 1.管道 管道分为有名管道和无名管道 无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无明管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端

DBus API的使用(讲的很清晰)

我是研究僧i 提交于 2020-02-29 11:21:36
转自 DBus 入门与应用--基本概念 上(C API 级别的使用观点) 、 DBus 入门与应用--基本概念 下(C API 级别的使用观点) 转载请注明出处 作者: 唐风 DBus是用来进行进程间通信的。下面这张图展示了一些DBus的大部分东西,但是它太复杂了: DBus 本身是构建在 Socket 机制之上。真正的通信还是由 Socket 来完成的。DBus 则是在这之上,制定了一些通信的协议,并提供了更高一层的接口,以更方便应用程序之间进行数据的交互。 在DBus的体系中,有一个常驻的进程 Daemon,所有进程间的交互都通过它来进行分发和管理。所有希望使用 DBus 进行通信的进程,都必须事先连上 Daemon,并将自己的名字注册到 Daemon 上,之后,Daemon会根据需要把消息以及数据发到相应的进程中。 首先使用 1 conn = dbus_bus_get(DBUS_BUS_SESSION, &err); 让应用程序和 DBus 之间取得连接。之后,使用函数 1 ret = dbus_bus_request_name(conn, " test.method.server " , 2 DBUS_NAME_FLAG_REPLACE_EXISTING 3 , &err); 将自己的进程名字注册到 Daemon 上。(参考前篇的[共通用代码])。这样通信就有了基础了。

centos7下安装docker(10容器底层--cgroup和namespace)

大憨熊 提交于 2020-02-29 07:10:51
cgroup和namespace是实现容器底层的重要技术 cgroup:实现资源限制 namespace:实现资源隔离 1.cgroup:control group Linux操作系统通过cgroup可以设置进程使用CPU,内存和IO资源使用的限额。我们之前学习的通过-m,--memory-swap,-c,--blkio-weight就是通过cgroup实现的。那么cgroup到底是什么样子的呢? 可以在 /sys/fs/cgroup 里面找到,例如: 我们运行一个容器,我们设置的cpu的权重是700 我们进入/sys/fs/cgroup/cpu/docker目录下的相应的容器的ID的目录里面,看cpu.shares,可以看到我们设置的权重是700 同样的我们进入/sys/fs/cgroup/memory/docker/中大概是memory.limit_in_bytes这个文件是容器内存的大小 同样的我们进入/sys/fs/cgroup/blkio/docker/中,blkio.weight这个文件是Block IO的权重文件 我们可以在以上的文件中,查看或者更改容器资源的大小 2.namespace 我们运行的每一个容器,都像是一个新的操作系统一样,都有文件系统,网卡等资源;那网卡来说,每个容器都会认为自己有一块独立的网卡,即使Host主机实际只有一块网卡资源

实现容器的底层技术

一世执手 提交于 2020-02-29 07:04:52
https://www.cnblogs.com/CloudMan6/p/7045784.html 为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术。 cgroup 和 namespace 是最重要的两种技术。cgroup 实现资源限额, namespace 实现资源隔离。 cgroup cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。相信你已经猜到了:前面我们看到的 --cpu-shares 、 -m 、 --device-write-bps 实际上就是在配置 cgroup。 cgroup 到底长什么样子呢?我们可以在 /sys/fs/cgroup 中找到它。还是用例子来说明,启动一个容器,设置 --cpu-shares=512 : 查看容器的 ID: 在 /sys/fs/cgroup/cpu/docker 目录中,Linux 会为每个容器创建一个 cgroup 目录,以容器长ID 命名: 目录中包含所有与 cpu 相关的 cgroup 配置,文件 cpu.shares 保存的就是 --cpu-shares 的配置,值为 512。 同样的,/sys/fs/cgroup/memory/docker 和 /sys/fs/cgroup/blkio/docker 中保存的是内存以及

Nginx专题(一)-----简介

大兔子大兔子 提交于 2020-02-28 19:49:35
Nginx简介 Apache Apache仍然是时长占用量最高的web服务器,据最新数据统计,市场占有率目前是50%左右。主要优势在于一个是比较早出现的一个Http静态资源服务器,同时又是开源的。所以在技术上的支持以及市面上的各种解决方案都比较成熟。Apache支持的模块非常丰富。 Nginx Nginx是俄罗斯人编写的一款高性能的HTTP和反向代理服务器,在高连接并发的情况下,它能够支持高达50000个并发连接数的响应,但是内存、CPU等系统资源消耗却很低,运行很稳定。目前Nginx在国内很多大型企业都有应用,据最新统计,Nginx的市场占有率已经到33%左右了。而Apache的市场占有率虽然仍然是最高的,但是是呈下降趋势。而Nginx的势头很明显。选择Nginx的理由也很简单:第一,它可以支持5W高并发连接;第二,内存消耗少;第三,成本低,如果采用F5、NetScaler等硬件负载均衡设备的话,需要大几十万。而Nginx是开源的,可以免费使用并且能用于商业用途 常用Web服务器介绍 apache、Nginx、tomcat、weblogic、iis、jboss、websphere、 jetty、netty、lighttpd、glassfish 1、Chrome得到html字符串 2、html文本在服务端,通过网络传给chrome 3、服务端,自己临时生成html字符串返回 4

进程间通信---信号

僤鯓⒐⒋嵵緔 提交于 2020-02-28 18:18:11
信号的概念 信号在我们的 生活中随处可见, 如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪 ...... 他们都有共性: 1. 简单 2. 不能携带大量信息 3. 满足某个特设条件才发送。 信号是信息的载体, Linux/UNIX 环境下,古老、经典的通信方式, 现下依然是主要的通信手段。 Unix 早期版本就提供了信号机制,但不可靠,信号可能丢失。 Berkeley 和 AT&T 都对信号模型做了更改,增加了可靠信号机制。但彼此不兼容。 POSIX.1 对可靠信号例程进行了标准化。 信号的机制 A 给 B 发送信号, B 收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行。与硬件中断类似——异步模式。但信号是软件层面上实现的中断,早期常被称为“软中断”。 每个进程收到的所有信号,都是由内核负责发送的。 与信号相关的事件和状态 产生信号 : 1. 按键产生,如: Ctrl+c 、 Ctrl+z 、 Ctrl+\ 2. 系统调用产生,如: kill 、 raise 、 abort 3. 软件条件产生,如:定时器 alarm 4. 硬件异常产生,如:非法访问内存 ( 段错误 ) 、除 0( 浮点数例外 ) 、内存对齐出错 ( 总线错误 ) 5. 命令产生,如: kill 命令 递达 :递送并且到达进程。

python 队列,进程中的队列,管道,数据共享,进程池部分

风格不统一 提交于 2020-02-28 17:50:39
进程之间的通信:   队列 重要   管道 队列的底层 进程之间的数据共享 进程池 进程间的通信: IPC 队列:先进先出FIFO - 维护秩序的时候用的较多 买票 秒杀 from queue import Queue q = Queue(5) print(q.qsize()) q.put(12) # q.put(3) # q.put(4) # q.put(4) # q.put(4) q.put_nowwait()#当队列满的时候添加会报错,需要使用try print('***',q.qsize()) print(q.get()) # print(q.get()) # print(q.get()) # print(q.get()) #没有值的时候会阻塞 print(q.get_nowwait())#当有值的时候取值 print(q.get_nowait())#当没有值的时候会报错 print(q.full())#查看队列是否满了,常和not使用做判断,要使用try print(q.empty())#查看队列是否是空,常和not使用做判断 print(q.qsize()) #查看队列有几个元素 print(q.get()) print(q.get()) print(q.qsize()) 栈: 先进后出 -- 算法 三级菜单 计算文件的大小 创建共享的进程队列

进程与线程之间的区别

て烟熏妆下的殇ゞ 提交于 2020-02-28 16:59:10
进程是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态的概念。每个进程都有自己的地址空间(进程空间)。进程空间的大小与处理机位数有关。进程至少有5种基本状态:初始态,执行态,等待状态,就绪状态,终止状态。 在多用户环境下,一个服务器通常需要接受大量的不学定数量用户的并发请求,而为每一个请求都创建一个进程非常不明智,无论从系统资源开销方面还是响应用户请求的效率上来看。这也是多线程诞生的一个原因。线程是进程的一部分,一个没有线程的进程可以看做是单线程。线程也是CPU调度的一个基本单位。 进程 线状执行 进程间资源保密 进程间通信通过系统层交互 进程的执行过程是线装的,中间可能会发生中断或暂停,但是这个进程所拥有的资源只有进程的内部才能使用。一旦进程发生上下文切换,进程里的资源就会被保护起来。所以说进程之间是资源保密的。如果要进程进程间的通信,那必须通过系统层才能实现,这个数据的交互过程是比较耗时,也很耗资源。 上面说了,进程间通信很耗时,也很耗资源。所以可以在一个进程中采用多线程技术。线程的改变只是表示CPU执行过程的改变,而不会发生进程资源的变化,换句话说就是,统一进程内,多个线程是资源共享的。进程有一个完整的虚拟空间。线程没有。多个线程在同一进程中共享这个进程的所有资源。 线程 适用于:多任务,多核 不适用于:进程调度少,切换少的实时系统 线程可以提高系统的执行效率

python语法基础-并发编程-进程-进程理论和进程的开启

时间秒杀一切 提交于 2020-02-28 08:18:08
############################################## """ 并发编程的相关概念: 进程 1,运行中的程序,就是进程,程序是没有生命的实体,运行起来了就有生命了, 操作系统可以管理进程,进程是操作系统基本的执行单元, 2,每一个进程都有它自己的地址空间,进程之间是不会混的,比如qq不能访问微信的地址空间, 操作系统替你隔离开了,这也是操作系统引入进程这个概念的原因, ####################################### 进程的调度 1,先来先服务,有一个不好的,就是不利于短作业 2,短作业优先算法,但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。 3,时间片轮转算法,就是轮流执行,已经很科学了, 4,多级反馈队列算法,有多个队列,有一个新任务来了放入第一个队列,这是优先级加上时间片轮转,第二个任务来了放入下一级, ####################################### 并发和并行: 进程的并行:这种只有在多核cpu才可以实现, 进程的并发:这是轮流执行,由于速度很快,看起来像是一起执行的,比如一遍听音乐,一遍写代码, ###################################### 进程的三状态转换图:非常重要 1,进程一开始运行的时候