进程间通信

LVS、Nginx 及 HAProxy 工作原理

点点圈 提交于 2020-01-28 08:05:38
当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。 在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。 最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。 LVS、Nginx、HAProxy 是目前使用最广泛的三种软件负载均衡软件。 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的 Web 应用,比如日 PV 小于1000万,用 Nginx 就完全可以了;如果机器不少,可以用 DNS 轮询,LVS 所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用 LVS。 目前关于网站架构一般比较合理流行的架构方案: Web 前端采用 Nginx/HAProxy

进程间通信

試著忘記壹切 提交于 2020-01-28 07:53:03
【进程间通信】 进程间由于空间独立,资源互相无法直接获取 此时在不同的进程间传递数据就需要专门的进程间通信方法 和磁盘交互: 使用中间文件,但是不安全,速度慢 进程间通信方法(IPC): 管道、消息队列、共享内存、信号、信号量、套接字 【管道通信Pipe】 1.原理: 在内存中开辟一块空间,形成管道结构,管道对多个进程可见,进程可以通过对管道的读写操作进行通信 2.[multiprocessing.Pipe] 1.fd1,fd2 = Pipe(duplex=True) 功能:创建一个管道 参数: duplex默认为True 表示双向管道 设置为False 表示单项管道 返回值: 返回两个管道流对象,表示管道两端 如果是双向管道,则都可以读写 如果是单向管道,则fd1只读 fd2只写 2.fd1.recv() 功能:从管道内读取信息 参数:无 返回值:读到的内容 注意:当管道内无内容的时候会阻塞 3.fd2.send(data) 功能:向管道写入内容 参数:要写的内容 注意:可以发送几乎python的任意数据类型 3.示例(双向管道): from multiprocessing import Process,Pipe import os,time # 创建管道 fd1,fd2 = Pipe() def fun(name): time.sleep(3) # 向管道内写入内容 fd2

python week08 并发编程之多线程--实践部分

删除回忆录丶 提交于 2020-01-28 07:21:29
一. threading模块介绍   multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍  官网链接:https://docs.python.org/3/library/threading.html?highlight=threading# 二 .开启线程的两种方式    # @Time : 2018/9/10 14:48 # @Author : Jame from threading import Thread import time #方法1 # def task(name): # print('%s is running'%name) # time.sleep(2) # print('%s is done'%name) # # # # if __name__ == '__main__': # t=Thread(target=task,args=('线程1',)) # t.start() #几乎是线程信号发送的同时,线程就立即开启了,证明线程的创建开销远远小雨进程 # print('主.....') # #主线程的生命周期就是所在进程的生命周期,进程应该再进程内所有线程都运行完毕后才应该结束 方法1 # @Time : 2018/9/10 14:48 # @Author : Jame from

操作系统特征、功能和用户接口

北慕城南 提交于 2020-01-28 05:00:58
1、操作系统特征 ( Characteristics of OperatingSystems ) 并行性 并行性和并发性是既相似又有区别的两个概念。并行性是指两个或多个事件在同一时刻发生,而 并发性是指两个或多个在同一时间间隔内 发生。在 多道程序环境 下, 并发性是指宏观上在一段时间内有多道程序在同时执行 。但在单处理机系统中,每一个时刻仅能执行一道程序,故微观上,这些程序是在交互执行。 共享性(Sharing) 共享是指系统中的所有资源不再为一个程序所独占,而是供同时存在于系统中的多道程序所共同使用。根据资源属性不同,可有 互斥共享 和 同时共享 两种不同的共享方式。 并发和共享关系: 并发和共享是操作系统的两个最基本的特性,它们又是互为存在条件。一方面资源共享是以程序(进程)的并发性执行为条件的,若系统不允许程序并发执行,自然不存在资源共享问题。另一方面若系统不能对资源共享实施有效管理,则也必将影响到程序并发执行。 虚拟性(Virtual) 虚拟是指通过某种技术把一个物理实体变成若干个逻辑上的对应物。物理实体是实际存在的,是实的;逻辑物体是用户感觉到的,是虚拟的。例如在单CPU多道分时系统中,通过多道程序技术和分时技术可以把一个物理CPU虚拟为多个逻辑上的CPU,使每个终端用户都认为有一台“独立”的CPU为它运行,用户感觉的CPU是虚拟CPU。 异步性

Linux进程间通信

丶灬走出姿态 提交于 2020-01-28 04:49:13
进程间数据通信需要使用特殊手段,如信号量、队列、共享内存等,因为彼此之间获取不到全局变量。 线程间通信比较简单,直接使用全局变量就行。 目录 一、队列 1.创建新消息队列或取得已存在消息队列 2.向队列读/写消息 3.设置消息队列属性 4.例程 二、共享内存 1.生成键值 2.创建共享存储空间 3.获取第一个可用共享内存空间的地址 4.例程 一、队列 这篇CSDN博客讲述的队列通信验证是正确的。20191209 这篇文章讲得也很详细 1.创建新消息队列或取得已存在消息队列 原型: int msgget ( key_t key , int msgflg ) ; 参数: key:可以认为是一个端口号,也可以由函数ftok生成。 msgflg:IPC_CREAT值,若没有该队列,则创建一个并返回新标识符;若已存在,则返回原标识符。   IPC_EXCL值,若没有该队列,则返回 - 1 ;若已存在,则返回 0 。 2.向队列读/写消息 msgrcv从队列中取用消息:ssize_t msgrcv ( int msqid , void * msgp , size_t msgsz , long msgtyp , int msgflg ) ; msgsnd将数据放到消息队列中: int msgsnd ( int msqid , const void * msgp , size_t msgsz ,

初探Windows用户态调试机制

倾然丶 夕夏残阳落幕 提交于 2020-01-28 03:56:35
我们在感叹Onlydbg强大与便利的同时,是否考虑过它实现的原理呢? 作为一个技术人员知其然必知其所以然,这才是我们追求的本心。 最近在学习张银奎老师的《软件调试》,获益良多。熟悉Windows调试机制,对我们深入理解操作系统以及游戏保护的原理有着莫大好处。 0X01 初探调试原理 调试系统的实现思路如图所示: 调试器与被调试程序建立联系,程序像调试器发送调试信息,调试器暂停程序处理完调试信息后再恢复程序运行,如此周而复始。 下面我们看看如何用操作系统提供的API去实现一个简单的调试器。 //启动要调试的进程或挂接调试器到已运行的进程上 CreateProcess(..., DEBUG_PROCESS, ...) or DebugActiveProcess(dwProcessId) DEBUG_EVENT de; BOOL bContinue = TRUE; DWORD dwContinueStatus; while(bContinue) { bContinue = WaitForDebugEvent(&de, INFINITE); switch(de.dwDebugEventCode) { ... default: { dwContinueStatus = DBG_CONTINUE; break; } } ContinueDebugEvent(de.dwProcessId, de

进程2

血红的双手。 提交于 2020-01-27 22:24:24
9.进程间通信   I PC 机制( InterProcess Communication ),指两个进程之间进行数据交换的过程 进程与进程间的数据是隔离的,通信需要介质:管道 / 队列(管道+锁)   队列:先进先出   堆栈:先进后出 队列的特点:   设置一个队列q:在存放值和取值的时候都会出现阻塞的情况(队列满了,队列空了)   1、q.put():放入值   2、q.get():获取队列里面的值(同一时刻只能有一个任务来队列中获取数据)       3、q.get_nowait():数据时,跟get取值一样,没有数据时,直接报错   4、q.empty():判断队列是否为空,需要注意的是,在并发的情况下,这个方法判断不准确!   5、q.full():判断是否达到队列的最大存储个数 关于队列 from multiprocessing import Queue q = Queue(9) # 产生一个最多能够存放9个数据的队列 q.put(1) q.put(3) q.put(4) print(q.full()) q.put(2) q.put(5) for i in range(4): q.put(i) print(q.get()) # 取数据,get一次就取一个;有取无等 print(q.get()) print(q.get()) print(q.get_nowait())

python之路_并发编程之多进程2

萝らか妹 提交于 2020-01-27 17:04:37
一、守护进程   主进程创建守护进程,守护进程的主要的特征为:①守护进程会在主进程代码执行结束时立即终止;②守护进程内无法继续再开子进程,否则会抛出异常。 实例: from multiprocessing import Process import time def foo(): print('starting123') time.sleep(1) print('endig123') def bar(): print('starting456') time.sleep(3) print('ending456') if __name__=='__main__': p1=Process(target=foo) p2=Process(target=bar) p1.daemon=True #必须在start()之前开守护进程 p1.start() #向操作系统发出开启p1子进程请求 p2.start() #向操作系统发出开启p2子进程请求 print('main') #主进程最后一行代码执行打印完后,立即终止p1子进程的执行   注:打印最后一行主进程代码结束,则守护进程p1应该被终止,可能会有p1任务执行的打印信息‘start123’,因为主进程打印main-时,p1也执行了,但是随即被终止。 二、互斥锁    进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件

进程间通信 基于队列实现进程与进程间通信 生产者消费者模型

我怕爱的太早我们不能终老 提交于 2020-01-27 05:15:42
队列:先进先出 堆栈:先进后出 利用队列实现进程通信 from multiprocessing import Queue q =Queue(5) #产生一个最多能够存放5个数据的队列 如果不写 默认就存放很多份 # q.put(1) #往队列中存放数据,如果存放的数据个数大于队列最大存储个数,程序会阻塞 # q.put(2) # q.put(3) # q.put(4) # print(q.full()) # False判断队列是否被存放满 # q.put(5) # print(q.full()) #True # q.put(6) # print(q.full()) # for i in range(1,6): q.put(i) #for循环往队列里面存放数据 # print(q.get()) #1 取数据,get一次就取一个 # print(q.get()) #2 # print(q.get()) #3 # print(q.empty()) #False # q.get_nowait() # 下面 4 就被这个获取了 不会显示 在队列有数据的情况下,跟get取值一样,当队列没有数据的情况下,取值直接报错 # print(q.get()) #4 # print(q.get()) #5 # print(q.empty()) #True 判断队列是否为空,需要注意的是,在并发的情况下

应用层概述、基本原理

天涯浪子 提交于 2020-01-27 04:37:03
网络应用体系结构 客户机/服务器结构(Client-Server,C/S) 点对点结构(peer-to-peer,P2P) 混合结构(Hybrid) 1.客户机/服务器结构 服务器 7*24小时提供服务 永久性访问地址/域名 利用大量服务器实现可拓展性 客户机 与服务器通信,使用服务器提供的服务 间歇性接入网络 可能使用动态IP地址 不会与其他客户机直接通信 2.P2P 没有永远在线的服务器 任意端系统/节点之间可以直接通信 节点间歇性接入网络 节点可能改变IP地址 优点:高度可伸缩 缺点:难于管理 3.混合结构 例:软件Napster 文件传输使用P2P结构 文件的搜索采用C/S结构——集中式 每个节点向中央服务器登记自己的内容 每个节点向中央服务器提交查询请求,查找感兴趣的内容 网络应用的基础:进程间通信 进程: 主机上运行的程序 同一主机上运行的进程间通信: 进程间通信机制;操作系统提供 不同主机上运行的进程间通信: 消息交换 客户机进程: 发起通信的进程 服务器进程: 等待通信请求的进程 套接字:socket 进程间通信利用socket发送/接收消息实现 类似寄信 发送方将消息送到门外邮箱 发送方依赖(门外的)传输基础设施将消息传到接收方所在主机,并送到接收方的门外 接收方从门外获取消息 传输基础设施向进程提供API 传输协议的选择 参数的设置 寻址进程