多进程

apache和nginx的区别

烂漫一生 提交于 2019-12-02 18:05:23
apache / nginx都是web应用服务(web容器) 一:Apache拥有丰富的模块组件支持,稳定性强,BUG少,动态内容处理强。 处理请求方式:异步阻塞型 1:Apache提供一系列多重处理模块,通过这些多重处理模块来使用操作系统的资源,对进程和线程池进行管理,控制处理用户请求。 2:Apache提供了三种多重处理模块:mpm_prefork、mpm_worker、mpm_envent 参考文献: http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html https://blog.51cto.com/balich/1743798 1):mpm_prefork: 成熟稳定兼容性好,不适合处理高并发 默认的工作模式是Prefork MPM,这种模式采用的是预派生子进程方式,用单独的子进程来处理请求,子进程间互相独立,互不影响,大大的提高了稳定性,每个子进程中只有一个线程,在一个时间点内,只能处理一个请求,进程都会占用内存,所以消耗系统资源过高; 2):mpm_worker: 适合处理高并发。但是处理长连接 (keep-alive) 时比较差,只能等超时释放 Worker MPM是Apche 2.0版本中全新的支持多进程多线程混合模型的MPM,由于使用线程来处理HTTP请求,所以效率非常高,而对系统的开销也相对较低

多线程以及多进程应该怎么选择?

安稳与你 提交于 2019-12-02 14:28:38
原文链接: http://www.kokojia.com/article/20845.html  在网上你可能会看到有很多的人问到底是使用进程好还是线程好?而你在教科书上会看到"进程是资源分配最小的单位,线程是CPU调度的最小单位"。但是这句话似乎还是没有解决我们心中的疑惑,到底是进程好还是线程好呢?下面我们来分析一下多进程和多线程的优缺点以及它们的对比。   在对比两者之前我们先进行一个简单的了解:   多进程:一个运行中的程序就叫做进程,当 操作系统 在执行一个程序的时候,会在系统中建立一个进程,而这个进程中,必须至少建立一个线程来作为这个进程运行的入口。    优点:内存隔离,单个进程的崩溃不会导致这个系统的崩溃。而且进程方便测试以及编程简单    缺点:创建销毁比较麻烦,进程间数据的共享麻烦,并且消耗的资源比较多。  多线程:一个进程可以拥有多个线程,所以说线程是进程中的组成部分,也就说说一个线程必须会有一个父进程。线程自身是不能拥有系统资源的,但是它可以拥有自己的堆、栈、局部变量以及程序计算器。    优点:可以提高系统的并行性,数据共享比较方便,切换比较快。    缺点:由于没有内存的隔离,所以导致了一个线程的崩溃会导致整个进程的崩溃。编程复杂以及调试困难,线程执行的随机性可能导致逻辑混乱,甚至发生死锁现象;   下面我们从几个方面对两者进行比较:   数据共享以及同步

Python标准库10 多进程初步 (multiprocessing包)

风格不统一 提交于 2019-12-02 10:08:53
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 我们已经见过了 使用subprocess包来创建子进程 ,但这个包有两个很大的局限性:1) 我们总是让subprocess运行外部的程序,而不是运行一个Python脚本内部编写的函数。2) 进程间只通过管道进行文本交流。以上限制了我们将subprocess包应用到更广泛的多进程任务。(这样的比较实际是不公平的,因为subprocessing本身就是设计成为一个shell,而不是一个多进程管理包) threading和multiprocessing (请尽量先阅读 Python多线程与同步 ) multiprocessing 包是Python中的多进程管理包。与threading.Thread类似,它可以利用 multiprocessing.Process 对象来创建一个进程。该进程可以运行在Python程序内部编写的函数。该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。此外multiprocessing包中也有 Lock / Event / Semaphore / Condition 类 (这些对象可以像多线程那样,通过参数传递给各个进程),用以 同步 进程 ,其用法与threading包中的同名类一致。所以

Android基础只是 IPC相关

点点圈 提交于 2019-12-02 09:17:11
一、在Android中什么样的情况下会使用多进程模式,如何开启多进程 1、什么情况下使用多进程模式 分担主进程的内存压力 2、如何开启多进程 四大组件,在Manifest中 指定 android:process 属性。 二、Android为什么采用Binder做为IPC机制 1、 Binder Binder是Android中一种跨进程方式。 2、Android 要采用 Binder 作为 IPC 机制 https://blog.csdn.net/lanye11/article/details/77962825 3、 Binder死亡监听 public void onServiceConnected(ComponentName name, IBinder service) { if (service != null) { mBinderManager = IBinderManager.Stub.asInterface(service); try { mBinderManager.asBinder().linkToDeath(new IBinder.DeathRecipient() { @Override public void binderDied() {//子进程的主线程中监听binder的死亡通知 mBinderManager.asBinder().unlinkToDeath

Python进程和线程

走远了吗. 提交于 2019-12-02 06:33:16
Python进程和线程 本文内容是基于如下参考资料。是对如下参考资料的梳理并加上自己的理解。 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431929340191970154d52b9d484b88a7b343708fcc60000 http://www.runoob.com/python3/python3-multithreading.html 1基础 一个任务就是一个进程(Process) 进程内的这些“子任务”称为线程(Thread)。 由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务(多进程)轮流调度到每个核心上执行。让每个线程都短暂地交替运行,看起来就像同时执行一样。 多个线程由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。 自己编程中多任务的实现有3种方式(多任务既可以多线程实现也可以多进程实现): 多进程模式; 多线程模式; 多进程+多线程模式。 同时执行多个任务通常各个任务之间是有关联的(无论是进程还是线程),需要相互通信和协调,涉及到同步、数据共享的问题。 常见多任务协调要求: 任务1必须暂停等待任务2完成后才能继续执行 任务3和任务4又不能同时执行 2

Nginx系列p3:进程结构

試著忘記壹切 提交于 2019-12-02 05:33:22
Nginx 有两种进程结构:单进程结构,多进程结构。本篇文章我们主要说多进程结构。 问 :那为什么 Nginx 采用多进程结构,而不是多线程结构呢? 答 :这是因为 Nginx 最核心的目的就是要保证高可用性和高可靠性,当 Nginx 采用了多线程结构的时候,因为多个线程是共享同一个地址空间的,所以当一个第三方模块引发了一个地址空间导致的段错误时,在导致地址越界时,会导致整个 Nginx 进程挂掉。 单进程结构:不适用于生产环境,只用于调试。因为在生产环境中,nginx 要求要足够的健壮,而且要利用 CPU 多核的一个特性。 多进程结构: 1:master 进程:第三方模块一般不会在 master 进程中加入自己的功能代码的。目的是管理 worker 进程,比如:监控每个 worker 进程是不是在正确的工作,需不需要做重新载入文件,需不需要做热部署,等等。 2,worker 进程:主要用来处理请求,一般设置为当前计算机的核数,是每一个 worker 进程绑定到一个 cpu 核上,这样可以更好的使用 cpu 核上的 cpu 缓存,来减少 cpu 缓存失效的命中率。 3,Cache Manager:做缓存的管理。 4,Cache Loader: 做缓存的载入。 注:上述进程间的通信都是通过共享内存来实现的。 来源: https://www.cnblogs.com/zpcoding/p

GIL全局解释器锁

僤鯓⒐⒋嵵緔 提交于 2019-12-02 03:32:05
‘’‘ 1.GIL全局解释器锁: 1.GIL是Cpython特有的。 2.GIL本质上是一个互斥锁. 3.GIL的为了阻止同一个进程内多个线程同时执行(并行) - 单个进程下的多个线程无法实现并行,但能实现并发 4.这把锁主要是因为CPython的内存管理不是 "线程安全" 的. - 保证线程在执行任务时不会被垃圾回收机制回收。 2.GIL存在的目的: GIL的存在就是为了保证线程安全的. 注意: 多个线程过来执行,一旦遇到IO操作,就会立马释放GIL解释器锁,交给下一个先进来的线程. 3.何时使用多进程或多线程? - 在计算密集型的情况下: - 使用多进程 - 在IO密集型的情况下: - 使用多线程 - 高效执行多个进程,内多个IO密集型的程序: - 使用 多进程 + 多线程 - ''' 4.服务端实现并发 import socket from threading import Thread import time """ 服务端: 1.有固定的IP和PORT 2.24小时不间断提供服务 3.能够支持并发 """ server = socket.socket() server.bind(( '127.0.0.1', 9550 )) server.listen(5) print('启动服务端。。。') def working(conn): while True: try: data

Python中的多任务、进程和线程

萝らか妹 提交于 2019-12-02 02:44:07
现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。 什么叫“多任务”呢? 简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。 现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么, 单核CPU是怎么执行多任务的呢? 答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。 真正的并行执行多任务只能在 多核CPU 上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。 对于操作系统来说, 一个任务就是一个进程(Process) ,比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。 有些进程还不止同时干一件事,比如Word

多线程和多进程

血红的双手。 提交于 2019-12-02 02:11:06
1,解释: 单线程是只有一条公路而且是单车道,只能同时行驶一辆汽车; 多线程是只有一条公路,但是是多车道,可以同时行驶多辆汽车; 多进程是有很多条公路,每条公路可能是单车道也可能是多车道,同样可以同时行驶多辆汽车。 2.如何选择: cpu密集型代码(各种循环处理, 计算等等);使用多进程 IO密集型代码(文件处理,网络爬虫等): 使用多线程 3.CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于CPU bound的程序。 CPU bound的程序一般而言CPU占用率相当高。这可能是因为任务本身不太需要访问I/O设备,也可能是因为程序是多线程实现因此屏蔽掉了等待I/O的时间。 4.IO密集型(I/O bound) IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作

C/C++网络编程8——多进程服务器端之销毁僵尸进程

天大地大妈咪最大 提交于 2019-12-01 20:38:17
  上一节提到,当子进程执行结束,父进程还在执行,在父进程结束之前子进程会成为僵尸进程,那么怎么销毁僵尸进程呢?父进程主动接收子进程的返回值。 销毁僵尸进程的方法:   1:使用wait函数   2:使用waitpid函数   3:利用信号 来源: https://www.cnblogs.com/418ks/p/11717203.html