进程间通信

进程和线程

≯℡__Kan透↙ 提交于 2020-02-28 06:45:00
进程和线程: 1、进程概念: 进程:就是操作系统中执行的一个程序,操作系统以进程为单位分配存储空间,每个进程都有自己的地址空间、数据栈以及其他用于跟踪进程执行的辅助数据,操作系统管理所有进程的执行,为它们合理的分配资源。进程可以通过fork或spawn的方式来创建新的进程来执行其他的任务,不过新的进程也有自己独立的内存空间,因此必须通过进程间通信机制(IPC,Inter-Process Communication)来实现数据共享,具体的方式包括管道、信号、套接字、共享内存区等。 2、线程概念: 一个进程还可以拥有多个并发的执行线索,简单的说就是拥有多个可以获得CPU调度的执行单元,这就是所谓的线程。 3、多进程概念: Unix和Linux操作系统上提供了 fork() 系统调用来创建进程,调用 fork() 函数的是父进程,创建出的是子进程,子进程是父进程的一个拷贝,但是子进程拥有自己的PID。 fork() 函数非常特殊它会返回两次,父进程中可以通过 fork() 函数的返回值得到子进程的PID,而子进程中的返回值永远都是0。Python的os模块提供了 fork() 函数。由于Windows系统没有 fork() 调用,因此要实现跨平台的多进程编程,可以使用multiprocessing模块的 Process 类来创建子进程,而且该模块还提供了更高级的封装

Python中的多进程与多线程(一)

独自空忆成欢 提交于 2020-02-27 05:20:59
一、背景   最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试。故而重操python旧业,通过python编写脚本来构造类似线上的调度场景。在脚本编写过程中,碰到这样一个需求:要在测试环境创建10000个作业流。   最开始的想法是在一个azkaban project下循环调用10000次create job接口(每个Flow只包含一个job)。由于azkaban它本身没有增加/删除作业流的接口,所有的作业流修改、增加、删除其实都是通过重新上传项目zip包实现的,相应地每次调猛犸前端的create job接口,实际上是在猛犸端对zip包的内容进行了重新的整合后再重新上传zip包到azkaban,整个过程可以拆解成如下过程:解压zip包获得zip包内容,变更zip包内的文件内容,重新打包zip包,上传到azkaban。因此,随着循环次数越往后,zip包包含的内容会越多,接口执行一次的时间就越长。实践发现,第一次调该接口的时间大致不到1秒,到循环1000次的时候接口调用一次的时间就达到了将近3秒。因此,如果指望一个循环10000次来构造该场景,显然要耗费巨大的时间。   在此背景下, 自然而然地就想到用多进程/多线程的方式来处理该问题。 二、“多任务”的操作系统基础   大家都知道,操作系统可以同时运行多个任务。比如你一边听音乐,一边聊IM

[zz]Linux VPS性能测试软件UnixBench

ぐ巨炮叔叔 提交于 2020-02-27 01:12:06
转载自 http://www.truevue.org/vps/unixbench-performance-test 现在大家都从共享主机慢慢转移到Linux VPS了。虽然各VPS主机提供商出售的VPS主机配置都大同小异,除了硬盘容量,带宽之外,Linux VPS性能又如何来衡量呢?这里推荐给大家一款Linux VPS性能测试软件UnixBench。 一.VPS性能测试软件Unixbench介绍 UnixBench的目的是给类Unix系统的性能提供一种基本的指标; 因此,多个测试被用于测试系统性能的各种各样的方面。 然后将这些测试结果与从基础系统的分数比较,产生一个预定值,这个预定值比原始的分数更容易处理。 综合整套系列的预定值将得出一个系统全面的索引。Unixbench包含了一些非常简单的图形测试,实现了测量系统的2D和3D图形性能。 Unixbench也能处理多处理器系统。 如果您的系统有多个CPUs,缺省行为是两次进行选择的测试 -- 一次与每个测试程序的一个拷贝每次跑,和与N一次复制,其中N是CPUs的数量。 这些设计使您能评价:当运行唯一任务时您系统的性能;多任务时您系统的性能;实施并行处理后你的系统性能的提高。 请注意unixbench是一个系统基准测试工具,不是CPU、RAM或者磁盘基准测试工具。 结果不仅依靠您的硬件,还要依靠您的操作系统,库甚至编译器。 二

进程间的八种通信方式

孤人 提交于 2020-02-26 15:11:21
1.无名管道( pipe ): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 2.高级管道(popen): 将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。 3.有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 4.消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 5.信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。 6.信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 7.共享内存( shared memory ) : 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用

计算机网络:自顶向下方法笔记 ———— 进程通信

随声附和 提交于 2020-02-26 07:29:17
Date : 2020 - 02 - 25 Author : Soler HO Book : 计算机网络:自顶向下方法 Description : 进程通信 进程通信 进程(process):运行在主机(端系统)中的一个程序。 当进程运行在相同的端系统上时,所使用进程间通信机制相互通信。 进程间通信的规则:由端系统(主机)上的操作系统确定。 进程在两个不同的端系统(主机)之间,通过 报文(message) 而相互通信。 1、客户和服务器进程 将一个进程标识为 客户 ,另一个进程标识为 服务器 ,所以客户和服务器的定义如下: 客户:发起通信方 服务器:等待联系方 另外,在应用层的P2P体系结构中,也有客户端和服务器端。 2、套接字Sockets 进程通过 套接字(socket) 的软件接口向网络 发送 报文和从网络 接收 报文。 例子:进程类似于房子,套接字类似于一扇门 发送进程需要推开套接字这个门,就通过运输设备将报文传送到其他的目的主机,接收来自传递给套接字的进程。 3、进程寻址过程 为了接收报文,进程必须有一个 标识符 。 该类标识符必须有两种信息: 主机的IP地址 端口号(port numbers) 端口号的例子: HTTP服务器:80 邮箱服务器:25 主机有 唯一的(unique) 32比特的IP地址标识。 来源: oschina 链接: https://my

Linux下的进程江湖

霸气de小男生 提交于 2020-02-26 05:56:33
有人的地方,就有江湖 Linux进程也不例外 有进程的地方,也有江湖 那些年,奢望金盆洗手的江湖大佬们 按照武侠小说的套路:一个高手一旦决定金盆洗手、隐退江湖,下场往往会很惨,甚至引发整个武林动荡。比如衡山派的刘正风,早已厌倦了江湖,打算去当一个音乐家,于是整了个金盆洗手大会,结果被嵩山派搞得家破人亡。再比如飞虎镖局老板吕腾空,在金盆洗手大会现场,又稀里糊涂地接了一个大单,天魔琴重现江湖,再次把江湖整得血雨腥风。人在江湖漂,哪能不挨刀,出来混,总是要还的。吃干了,抹净了,想做甩手掌柜脱身很难,正所谓:一入江湖深似海,从此便是局中人。 不仅仅在武侠世界中,在整个社会历史长河中,每个人也基本上被历史进程裹胁、随之沉浮,能做到完美脱身的很少很少。比如胡雪岩、沈万三,比如《大明王朝》中的商人沈一石,再比如《无间道》中的阿仁,活脱脱一个现实版余罪: “三年后又三年,都快10年了,老大” “今天是你生日啊,臭小子!” 在一个没有优雅退出机制的游戏中,既想搏一把,又想完美脱身,是需要极高的智慧和执行力的:既要抵制住不赚最后一个铜板的诱惑,又要在战略执行时果敢迅速,绝不拖泥带水。然而,大部分人却没有这个运气和智慧,总觉得自己能控制所有事情,总想干完这一票就金盆洗手,结果把自己所有的一切、甚至性命都搭了进去。为了所想起了执念,人们就容易变得不理性起来,人性的各种弱点开始暴漏,开始容易陷入各种纷争

Linux下的进程江湖

独自空忆成欢 提交于 2020-02-26 05:33:11
有人的地方,就有江湖 Linux进程也不例外 有进程的地方,也有江湖 那些年,奢望金盆洗手的江湖大佬们 按照武侠小说的套路:一个高手一旦决定金盆洗手、隐退江湖,下场往往会很惨,甚至引发整个武林动荡。比如衡山派的刘正风,早已厌倦了江湖,打算去当一个音乐家,于是整了个金盆洗手大会,结果被嵩山派搞得家破人亡。再比如飞虎镖局老板吕腾空,在金盆洗手大会现场,又稀里糊涂地接了一个大单,天魔琴重现江湖,再次把江湖整得血雨腥风。人在江湖漂,哪能不挨刀,出来混,总是要还的。吃干了,抹净了,想做甩手掌柜脱身很难,正所谓:一入江湖深似海,从此便是局中人。 不仅仅在武侠世界中,在整个社会历史长河中,每个人也基本上被历史进程裹胁、随之沉浮,能做到完美脱身的很少很少。比如胡雪岩、沈万三,比如《大明王朝》中的商人沈一石,再比如《无间道》中的阿仁,活脱脱一个现实版余罪: “三年后又三年,都快10年了,老大” “今天是你生日啊,臭小子!” 在一个没有优雅退出机制的游戏中,既想搏一把,又想完美脱身,是需要极高的智慧和执行力的:既要抵制住不赚最后一个铜板的诱惑,又要在战略执行时果敢迅速,绝不拖泥带水。然而,大部分人却没有这个运气和智慧,总觉得自己能控制所有事情,总想干完这一票就金盆洗手,结果把自己所有的一切、甚至性命都搭了进去。为了所想起了执念,人们就容易变得不理性起来,人性的各种弱点开始暴漏,开始容易陷入各种纷争

Python并发编程系列之常用概念剖析:并行 串行 并发 同步 异步 阻塞 非阻塞 进程 线程 协程

老子叫甜甜 提交于 2020-02-25 11:13:19
1 引言   并发、并行、串行、同步、异步、阻塞、非阻塞、进程、线程、协程是并发编程中的常见概念,相似却也有却不尽相同,令人头痛,这一篇博文中我们来区分一下这些概念。 2 并发与并行   在解释并发与并行之前,我们必须先明确: 单个处理器(一个单核CPU)在某一个时刻只能处理一个线程 。   并发是指在同一个处理器上通过时间片轮转的方式在多个线程之间频繁切换,由于切换速度极快,所以看似多个线程似乎被同时执行,但实际上每一个时刻都只有一个线程被执行,其他的线程出于阻塞状态。   并行是指多个处理器在同一时刻同时处理了多个不同的线程,这才是真正意义的同时被执行。   如下图所示,线程A与线程B同在一个CPU内执行,且任一t时刻内,都只有一个线程(A或者B)被执行,所以线程A与线程B是并发执行的。线程C和线程D分别在两个CPU内执行,且在某一个t时刻内同时都在执行,所以线程C和线程D是并行的。 3 并行与串行   上面已经说到,并行是指多个任务同时执行,而 串行 是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。   所以,并发与并行是在某一时刻是否都在执行的区别。并行与串行是同时进行或一个结束才进行下一个的区别。 4 同步与异步   同步与异步的概念与消息的通知机制有关:    同步 是指线程在访问某一资源时,获得了资源的返回结果之后才会执行其他操作

【计算机网络】网络应用

雨燕双飞 提交于 2020-02-24 18:35:35
网络应用 网络应用体系结构 网络应用的服务需求 Internet传输层服务模型 网络应用的基本原理 网络应用的基础:进程间通信 进程:主机上运行的程序 同一主机上运行的进程之间如何通信? (1)进程间通信机制 (2)操作系统提供 不同主机上运行的进程间如何通信? (1)消息交换 (2)客户机进程:发起通信的进程 (3)服务器进程:等待通信请求的进程 (4)套接字:Socket 传输基础设施向进程提供API 寻址主机---->IP地址 每个需要通信的进程----->端口号 Port Number 进程的标识符----->IP地址+端口号 网络应用的需求与传输层服务 需求 数据丢失(data loss)/可靠性(reliability) (1)能容忍一定的数据丢失,如网络电话 (2)要求100%可靠数据传输,如文件传输,telnet 时间(timing)/延迟(delay) (1)延迟足够低才有效 (2)网络电话/网络游戏 带宽(bandwidth) (1)带宽达到最低要求时才有效,如网络视频 (2)适应任何带宽,如email 安全性 Internet提供的传输服务 TCP (1)面向连接 (2)可靠的传输 (3)流量控制 发送速度不会过快,超过接收方的处理能力 (4)拥塞控制 网络负载过重的时候能够限制发送方的发送速度 (5)不提供时间/延迟保障 (6)不提供最小带宽保障 UDP

第 10 章 python进程与多进程

那年仲夏 提交于 2020-02-24 13:37:07
一、背景知识 顾明思义,进程即正在执行的一个过程,进程是对正在云的程序的一个抽象。 进程的概念起源与操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一,操作系统的其他所有内容都是围绕进程的概念展开的。 ps:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力,将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。 必备的理论基础: 1 #一 操作系统的作用: 2 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 3 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序 4 5 #二 多道技术: 6 1.产生背景:针对单核,实现并发 7 ps: 8 现在的主机一般是多核,那么每个核都会利用多道技术 9 有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个 10 cpu中的任意一个,具体由操作系统调度算法决定。 11 12 2.空间上的复用:如内存中同时有多道程序 13 3.时间上的复用:复用一个cpu的时间片 14 强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样 15 才能保证下次切换回来时,能基于上次切走的位置继续运行 二、python并发编程之进程 1、进程