多进程

多进程多线程简单说明,System V IPC 简介(本机IPC)【linux】(zz)

会有一股神秘感。 提交于 2020-03-08 10:04:16
多进程多线程简单说明 涉及管道通信的多进程和多线程说明 对比多进程和多线程各自使用的场合 线程 进程 System V IPC(本机IPC) 有关System V IPC System V IPC的特点 管道(原始IPC) System V IPC 使用System V IPC时,不存在亲缘进程的说法 System V IPC标识符 怎么才能得到这个“标识符” System V IPC标识符的作用? 多进程多线程简单说明 涉及管道通信的多进程和多线程说明 在使用有名管道实现双向通信时,由于读管道是阻塞读的,为了不让“读操作”阻塞“写操作”,使用了父子进 程来多线操作, 1)父进程这条线:读管道1 2)子进程这条线:写管道2 实际上我们后面在线程以后,凡是涉及到多线操作的,基本都使用多线程来实现 ,比如 1)主线程:读管道1 2)次线程:写管道2 我们这里通过进程间通信的管道方法实现,还会有线程实现的博客说明。 也就是说上面的管道通信, 我们完全可以把父进程改为主线程,把子进程改为次线程 。 对比多进程和多线程各自使用的场合 线程和进程都是并发运行的 ,但是线程和进程各自的使用的场合有所不同。 线程 凡是涉及多线时,我们使用线程来并发实现,比如我们上面实现的“有名管道”双向通信的例子,这个多线操作理论上就应该使用多线程来实现。 因为多线使用线程更省计算机cpu和内存的开销。

nginx进程结构

梦想与她 提交于 2020-03-07 04:47:40
nginx的进程结构 1.单进程结构(适用于 开发调试) 2.多进程结构(适合于生产环境)保持nginx健壮,利用多核特性 多进程nginx模型: 一个父进程:master进程 多个子进程:一类worker进程,一类cache进程(Cache Manager和 Cache Loader) 为什么采用多进程结构,而不是多线程结构? 保持高可用性,高可靠性。 如果采用多线程,那么多线程之间共享同一个内存的地址空间,如果某一个第三方模块引发一个地址空间导致的错误,会导致整个nginx进程全部挂掉 而采用多进程模型时,不会出现这样的问题 各个进程的功能: master进程不会加入第三方模块代码 master进程 通常是用来管理,监控worker进程是不是在正常的工作,需不需要重新载入配置文件,需不需要做热部署 所有的 worker进程 是真正处理请求的 cache是在多个worker进程之间共享的,而且cache不但要被worker进程使用,也要被Cache Manager和 Cache Loader所使用 Cache Manager和 Cache Loader 也是为 反向代理 时后端发来的动态请求做缓存所使用的 Cache Manager(缓存管理) Cache Loader(缓存载入) nginx采用事件驱动模型 : 每一个worker进程从头到尾占用一个CPU,所以往往要把

多进程Multiprocessing模块

☆樱花仙子☆ 提交于 2020-03-06 05:45:06
多进程 Multiprocessing 模块 先看看下面的几个方法: star() 方法启动进程, join() 方法实现进程间的同步, 等待所有进程退出。 close() 用来阻止多余的进程涌入进程池 Pool 造成进程阻塞。 参数: target 是函数名字,需要调用的函数 args 函数需要的参数, 以 tuple 的形式传入 用法: multiprocessing.Process(group= None, target= None, name= None, args=(), kwargs= {}, *, daemon= None) 写一个的例子: from multiprocessing import Pool import os,time def pr(str): print("The " + str + " is %s" %(os.getpid())) time.sleep(1) print("The " + str + " is close") if __name__ == "__main__": print('-------------------------------') print("the current pid: "+ str(os.getpid())) # 默认为自己电脑的核数 p = Pool(2) for i in range(5): p.apply

多进程Multiprocessing模块

匆匆过客 提交于 2020-03-06 03:02:40
多进程 Multiprocessing 模块 先看看下面的几个方法: star() 方法启动进程, join() 方法实现进程间的同步, 等待所有进程退出。 close() 用来阻止多余的进程涌入进程池 Pool 造成进程阻塞。 参数: target 是函数名字,需要调用的函数 args 函数需要的参数, 以 tuple 的形式传入 用法: multiprocessing.Process(group= None, target= None, name= None, args=(), kwargs= {}, *, daemon= None) 写一个的例子: from multiprocessing import Pool import os,time def pr(str): print("The " + str + " is %s" %(os.getpid())) time.sleep(1) print("The " + str + " is close") if __name__ == "__main__": print('-------------------------------') print("the current pid: "+ str(os.getpid())) # 默认为自己电脑的核数 p = Pool(2) for i in range(5): p.apply

操作系统多进程与文件操作的历史演变

£可爱£侵袭症+ 提交于 2020-03-05 13:24:32
结合历史上的操作系统,说明操作系统为什么要有多进程 六七十年代初,计算机刚刚发展之时,一台计算机只完成一件事情,但由于计算机的处理远远高于人手工的处理,当时的计算机很受人们欢迎;但慢慢地,人们想用少的成本完成更多的事情,便在思考是否可以将两台完成不同操作的计算机用一台计算机来实现。此时,多线程的思想已经慢慢进入人们的思想中。 在上世纪七八十年代,当计算机开始进入多个行业,人们需要让一台计算机干多种事,效率低、耗时长、未充分利用资源的单道批处理系统已经不能满足人们的需求,此时就有人提出在一个程序在执行不需要资源的I/O操作时,将其资源用于另一个程序,同时提高了内存资源以及I/O设备的利用率。而这种思想正是多进程的思想,这是多进程的萌芽。 又过了一段时间,一台计算机完成多种事情又不能满足人们的需求,试想,一家公司,人人都想用计算机做些什么操作,倘若资源只能在一台计算机中进行切换,岂不是又回到了单道批处理系统的思想上,所以人们再次利用多进程的思想,把一台计算机中程序的切换扩展到多台计算机资源的切换,更提高了资源的利用率,这是多进程的发展。 结合历史上的操作系统,说明操作系统为什么引入文件操作? 文件操作是操作系统用于明确磁盘或分区上的文件的方法和数据结构,具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等

python面试1000题之4-6

为君一笑 提交于 2020-03-02 18:31:07
4 python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。 多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Array 5 python多线程与多进程的区别: 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie)。所以,有必要对每个Process对象调用join()方法 (实际上等同于wait)。对于多线程来说,由于只有一个进程,所以不存在此必要性。 多进程应该避免共享资源。在多线程中,我们可以比较容易地共享资源,比如使用全局变量或者传递参数。在多进程情况下,由于每个进程有自己独立的内存空间,以上方法并不合适。此时我们可以通过共享内存和Manager的方法来共享资源。但这样做提高了程序的复杂度,并因为同步的需要而降低了程序的效率。 6 请写出一段Python代码实现删除一个list里面的重复元素 >>> l = [1,1,2,3,4,5,4] >>> list(set(l)) [1, 2, 3, 4, 5] 或者 d = {} for x in mylist:

单CPU环境中如何实现多进程并行工作?

点点圈 提交于 2020-03-02 03:25:12
原创作品转载请注明出处 原创作者 ShenYue(沈乐) 实验日期 20160306 实验名称 完成一个简单的时间片轮转多道程序内核代码 实验来源 《 Linux 内核分析》 MOOC 课程 http://mooc.study.163.com/course/USTC-1000029000 操作系统单程序的函数调用使用的是 堆栈机制 , 通过 ebp esp eip 指针的进栈出栈来切换不同的栈帧 ( 执行上下文 ), 然而单 CPU 只能有唯一的执行流 , 多进程环境中不可能让单一进程 ” 独占 ” , 如何实现多进程并行工作 , 在其他进程使用 CPU 的时候可以 ” 抢占 ” 执行资源 ? 答案就是 interrupt( 中断机制 ). 下面是一个关于 时间片轮转的操作系统内核实验 , 由于 Linux 内核代码本身提供了预留的接口用于开发者定义自己的系统启动函数和时钟中断处理函数 , 所以简单地实际这样的函数来进行中断处理动作就可以模拟周期性地时间中断 ” 抢占 ” 系统启动进程的过程 . 登录实验楼的环境 , 其中已经事先安装好了 GCC 的运行环境 ,QEMU 硬件模拟环境和 Linux 内核编译源码 . 定义 my_start_kernel, 周期性地在内核态打印 my_start_kernel here 的字符串 . 定义timer interrupt的回调函数my

浅析Chrome浏览器的多进程架构

梦想与她 提交于 2020-03-01 20:50:40
无论你是设计高性能的Web应用,还是从事Electron开发,或是从事Node.js扩展C++开发,了解Chrome的多进程架构以及网络流程、页面渲染过程、JavaScript执行流程等知识,是很有必要的。这一章,我在这里为大家浅析一下Chrome的多进程架构原理。 Chrome进程在任务管理器中的样子 下面这幅图就是打开Chrome浏览器初始页面时,在任务管理器中看到的chrome多进程的样子。 我们在Chrome中仅仅打开了一个默认的页面,怎么出现了这么多的进程呢? 单进程浏览器 我们知道,进程是程序的一个运行实例。详细解释就是,启动一个程序(比如Windows中的exe程序)的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。 在早年间(2007年之前),浏览器也是单进程运行的。浏览器的所有功能模块都是运行在同一个进程里,这些模块包含了网络、插件、JavaScript运行环境、渲染引擎和页面等。单进程浏览器的架构如下图所示: 如此多的功能模块运行在一个进程里,是导致单进程浏览器 不稳定 、 不流畅 和 不安全 的一个主要原因。 不稳定 早期浏览器需要借助于 插件 来实现诸如Web视频、Web游戏等各种强大的功能,印象深刻的就是各种flash插件,但是插件是最容易出问题的模块,并且还运行在浏览器进程之中

多线程,协程,进程;并发,并行;异步;非阻塞;

时光总嘲笑我的痴心妄想 提交于 2020-03-01 15:35:34
进程: 是资源分配的最小单位; ² 调度由操作系统完成; ² 进程空间独立,数据安全性好,有专门的进程间通信方法 ² 进程的创建和删除要比线程消耗更多的计算机资源 ² 有独立的内存空间(上下文切换的时候需要保存栈、cpu寄存器、虚拟内存、以及打开的相关句柄等信息,开销大) 1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立 2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制 线程: 是程序执行的最小单位(资源调度最小单位); ² 一个进程可以有多个线程,每个线程会共享父进程的资源(创建线程开销占用比进程小很多,可创建的数量也会很多) ² 线程的使用会给系统带来上下文切换的额外负担; ² 一个进程可以包含多个线程,线程共享进程的资源空间 1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源 2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃 协程: ² 调度完全由用户控制; ² 一个线程(进程)可以有多个协程; ² 每个线程(进程)循环按照指定的任务清单顺序完成不同的任务(当任务被堵塞时,执行下一个任务;当恢复时,再回来执行这个任务;任务间切换只需要保存任务的上下文,没有内核的开销,可以不加锁的访问全局变量)

php的生命周期

断了今生、忘了曾经 提交于 2020-03-01 08:50:35
1、PHP的运行模式: PHP 两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。 1、当我们在终端敲入 php 这个命令的时候,它使用的是CLI。 它就像一个web服务器一样来支持php完成这个请求,请求完成后再重新把控制权交给终端。 2、当使用Apache或者别web服务器作为宿主时,当一个请求到来时,PHP会来支持完成这个请求。一般有: 多进程(通常编译为apache的模块来处理PHP请求) 多线程模式 简要的执行过程: 1. PHP是随着Apache的启动而运行的; 2. PHP通过mod_php5.so模块和Apache相连(具体说来是 SAPI,即服务器应用程序编程接口 ); 3. PHP总共有三个模块:内核、Zend引擎、以及扩展层; 4. PHP内核用来处理请求、文件流、错误处理等相关操作; 5. Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它; 6. 扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要 MySQL 扩展来连接MySQL 数据库 ; 7. 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还; 8. 最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。 2.