进程间通信

Binder

丶灬走出姿态 提交于 2020-03-23 09:33:11
3 月,跳不动了?>>> Binder是IPC(进程间通信)方式的一种 为啥要用多进程呢? 每个应用占有单独的进程,虚拟机给每个应用分配的内存的有限的,也就是分配给每个进程的内存是有限的,如果我们把所有功能都放在一个进程中,向下载,加载大图片等很消耗内存,很容易造成主进程的内存耗尽,导致oom,所以可以另起一个进程来处理这些操作,并且在新的进程中,即便这些操作出bug了,也不会影响主进程运行 进程间如何通信的? 首先进程间是不能直接通信的,每个应用也就是进程分为用户空间和内核空间,用户空间之间是隔离的,但是内核空间是相通的,所以我们就可以将数据从用户空间A先传到内核空间,然后从内核空间再把数据传递到用户空间B进行接收,这样就形成了进程间的数据传递,也就是通信了 在binderservice时候,传递的第二个参数ServiceConnection中,asInterface, 这时候会调系统给生产的aidl文件中Proxy 这个Proxy类就是传递数据的,进入这个类里,就会看到我们自己写的aidl中的方法,我这里是addinfo 而通过Proxy中transcat方法将数据传递进binder,在binder中又会调用ontranscat中addinfo ,一调用这个方法这时候就会进入到服务端的stub中,stub是接收数据 一调这个addInfo就会调服务端的 这就形成了通信

python并发编程之多进程理论部分

本小妞迷上赌 提交于 2020-03-23 05:41:13
内容概要 操作系统介绍 进程 线程 协程 二. 进程 python并发编程之多进程理论部分 在python程序中的进程操作   运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建子进程。多个进程可以实现并发效果,也就是说,当我们的程序中存在多个进程的时候,在某些时候,就会让程序的执行速度变快。创建进程这个功能需要借助python中强大的模块。 multiprocess模块   multiprocess不是一个模块而是python中一个操作、管理进程的包。 这个包中几乎包含了和进程有关的所有子模块。大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享。 multiprocess.process模块 process模块介绍   process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建。 class Process(object): def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): self.name = '' self.daemon = False self.authkey = None self.exitcode = None self.ident = 0

Linux 多线程通信

耗尽温柔 提交于 2020-03-23 02:40:21
摘自资料(linux 与Windows不同) 线程间无需特别的手段进行通信,由于线程间能够共享数据结构,也就是一个全局变量能够被两个线程同一时候使用。只是要注意的是线程间须要做好同步,一般用mutex。能够參考一些比較新的UNIX/Linux编程的书,都会提到Posix线程编程,比方《UNIX环境高级编程(第二版)》、《UNIX系统编程》等等。 linux的消息属于IPC,也就是进程间通信,线程用不上。 linux用pthread_kill对线程发信号。 另:windows下不是用post..(你是说PostMessage吗?)进行线程通信的吧? windows用PostThreadMessage进行线程间通信,但实际上极少用这样的方法。还是利用同步多一些 LINUX下的同步和Windows原理都是一样的。只是Linux下的singal中断也非常好用。 用好信号量,共享资源就能够了。 使用多线程的理由之中的一个是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而执行于一个进程中的多个线程,它们彼此之间使用同样的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,并且

线程、进程间通信

我的梦境 提交于 2020-03-22 18:17:06
线程 在无线程的系统中,进程是: 存储器、外设等资源的分配单位 处理机调度的对象 在引入线程后: 线程 是 处理机调度 的对象 进程 作为 资源分配 单位 同一进程内可包含 多个线程 ,他们 共享进程的资源 线程的使用 引入线程的原因: 并行实体 共享同一个地址空间和所有可用数据 的能力 比进程更容易创建、撤销 性能的提高。如果存在着大量的计算和大量的IO处理,多线程允许这些活动 彼此重叠进行 ,加快应用程序执行的速度 多处理机系统,多线程可以真正地并行 例子:文字处理软件 如果程序只有一个线程,那么只要已启动磁盘备份,键盘和鼠标输入的命令都会不予理睬,知道备份结束,用户将感觉到程序反应迟钝 使用三个线程: 一个线程和用户交互 第二个线程在后台重新进行格式处理 第三个线程处理磁盘备份 例子:万维网服务器 Web服务器:接受用户请求,将所请求的页面发回给客户机 多线程实现: 一个线程(分配程序)从网络中读入工作请求,检查请求后,提交给一个工作线程(唤醒睡眠的工作线程) while (true) { get_next_request(&buf); handoff_work(&buf); } 工作线程负责调入页面(读高度缓存或磁盘) while (true) { wait_for_work(&buf); look_for_page_in_cache(&buf, &page); if

应用层

落花浮王杯 提交于 2020-03-22 10:54:54
网络应用的体系结构 客户机/服务器结构(Client-Server, C/S) 点对点结构(Peer-to-peer, P2P) 混合结构(Hybrid) 客户机/服务器结构 服务器 永久提供服务 永久性访问地址/域名 大量的服务器实现了可拓展性 客户机 与服务器通信,使用服务器提供的服务 间歇性接入网络 可能使用动态的ip地址 不会与其它客户机通信 P2P结构 没有永远在线的服务器 任意端系统/节点之间可以直接通讯 节点间歇性接入网络 节点可能改变IP地址 优点:高度可伸缩 缺点:难于管理 混合结构 Napster 文件传输使用P2P结构 文件的搜索采用C/S结构——集中式 网络应用进程通信 在计算机网络中, 进程指的就是程序。 同一主机上的进程之间的通信 进程间通信机制 操作系统提供 不同主机上的进程之间的通信 消息交换 套接字(Socket) 进程间通信利用socket发送/接收消息实现,这个过程类似于寄信 寻址进程 不同主机上的进程间通信,那么每个进程必须拥有标识符 寻址主机——ip地址 端口号(Port number):为主机上每个需要通信的进程分配一个端口号( HTTP Server: 80;Mail Server:25) 进程的标志符(ip地址+端口号) 应用层协议 网络应用需遵循应用层协议 公开协议 由RFC(Request For Comments)定义

Linux 多线程通信

岁酱吖の 提交于 2020-03-20 04:45:10
摘自资料(linux 与Windows不同) 线程间无需特别的手段进行通信,由于线程间能够共享数据结构,也就是一个全局变量能够被两个线程同一时候使用。只是要注意的是线程间须要做好同步,一般用mutex。能够參考一些比較新的UNIX/Linux编程的书,都会提到Posix线程编程,比方《UNIX环境高级编程(第二版)》、《UNIX系统编程》等等。 linux的消息属于IPC,也就是进程间通信,线程用不上。 linux用pthread_kill对线程发信号。 另:windows下不是用post..(你是说PostMessage吗?)进行线程通信的吧? windows用PostThreadMessage进行线程间通信,但实际上极少用这样的方法。还是利用同步多一些 LINUX下的同步和Windows原理都是一样的。只是Linux下的singal中断也非常好用。 用好信号量,共享资源就能够了。 使用多线程的理由之中的一个是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而执行于一个进程中的多个线程,它们彼此之间使用同样的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,并且

并发编程之多线程

主宰稳场 提交于 2020-03-18 22:51:00
一,什么是线程   在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程   线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线。   所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。   多线程(即多个控制线程)的概念是,在一个进程中存在多个线程,多个线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。 二,线程和进程的区别 Threads share the address space of the process that created it; processes have their own address space. Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent

进程-----线程

我的梦境 提交于 2020-03-18 06:01:29
一直来对进程,线程糊里糊涂,今天总结下: from TIPI 进程 进程是什么?进程是正在执行的程序;进程是正在计算机上执行的程序实例;进程是能分配给处理器并由处理器执行的实体。进程一般会包括指令集和系统资源集,这里的指令集是指程序代码,这里的系统资源集是指I/O、CPU、内存等。综合起来,我们也可以理解进程是具有一定独立功能的程序在关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 在进程执行时,进程都可以被唯一的表示,由以下一些元素组成: 进程描述符:进程的唯一标识符,用来和其它进程区分。在Linux中叫进程ID,在系统调用fork期间生成,只是我们通过getpid返回的不是其pid字段,而是其线程组号tgid。 进程状态:我们常说的挂起、运行等状态,其表示的是当前的状态。 优先级:进程间的执行调度相关,相对于其它进程而言。 程序计数器:程序中即将被执行的下一条指令的地址,该地址是内核术中或用户内存空间中的内存地址。 内存指针:包括程序代码和进程相关数据的指针,还有和其它进程共享内存块的指针。 上下文数据:进程执行时处理器的寄存器的数据。 I/O状态信息:包括显式的I/O请求、分配给进程的I/O设备等 记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制等 以上的这些元素都会放在一个叫做进程控制块的数据结构中

网络应用进程通信

跟風遠走 提交于 2020-03-17 18:51:55
1.进程:主机上运行的程序 2.同一个主机上运行的进程如何通信? 进程间的通信机制 操作系统提供 3.不同主机上进行的进程如何通信? 消息交换(报文) 客户机进程:发起通信的进程 服务器进程:等待通信请求的进程 不同主机进行通信利用的是套接字机制(操作系统系统提供的抽象机制) 进程间通信利用socket发送接收信息类似于寄信 4.如何寻址进程? 不同主机上的进程间通信,那么每个进程必须拥有标识符 5.如何寻址主机——IP地址 主机有了IP地址后不能足以定位进程,同一个主机可能有多个线程需要进行通信 这时我们就需要端口号来帮助我们,端口号(Port number) 为主机上每个需要通信的进程分配一个端口号 进程标识符:IP地址+端口号 网络应用需要遵循应用层协议: 公开协议:由RFC定义 允许互相操作 HTTP,SMTP… 私有的协议:多数P2P文件共享应用 应用层协议的内容: 消息类型:请求消息和响应消息 消息的语法/格式:消息中有哪些字段 每个字段如何描述 字段的语义:字段中信息的含义 规则:进程何时发送消息/响应消息 进程如何发送/响应消息 来源: CSDN 作者: 88_Rising 链接: https://blog.csdn.net/Richchigga/article/details/104819651

python进程------multiprocessing包

谁说胖子不能爱 提交于 2020-03-17 06:03:22
一、multiprocessing包 它是是python中的多进程管理包。与threading.Treade类似,它可以利用multiprocessing.Process对象来创建一个进程。该进程可以在python程序内部编写函数。该process对象和thread对象的用法相同,又有 start()、run()、join()的方法。此外multiprocessing包中也有Lock/Event/Semaphore/Condition类(这些对象可以像多线程那要,通过参数传递给各个进程),用以同步进程其使用方法和threading包中的同名类 一致。所以,multiprocessing的很大一部分与threading使用同一套API,只不过换到了多进程的情境。如果你连线程都没有看过、了解,那你看进程做什么,线程都是在进程里面执行的。进程类似于线程的容器。 二、process类 创建进程的类: Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) 强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 参数介绍: 1. group参数未使用,值始终为None 2.target表示调用对象