多进程

Linux BASH多进程并行处理的方法实现

我与影子孤独终老i 提交于 2019-12-10 05:18:05
在shell中进行多进程处理,以前写的都是单进程的,今天看了一篇文章讲了linux的多进程处理。 #!/bin/bash SEND_THREAD_NUM=13 tmp_fifofile="/tmp/$$.fifo" # 脚本运行的当前进程ID号作为文件名 mkfifo “$tmp_fifofile" # 新建一个随机fifo管道文件 exec 6<>"$tmp_fifofile" # 定义文件描述符6指向这个fifo管道文件 rm $tmp_fifofile for ((i=0;i<$SEND_THREAD_NUM;i++));do echo # for循环 往 fifo管道文件中写入13个空行 done >&6 for i in `seq 100`;do # 100 次 for 循环 开始 read -u6 # 从文件描述符6中读取行(实际指向fifo管道) { echo $i # 打印 i sleep 3 # 暂停3秒 echo >&6 # 再次往fifo管道文件中写入一个空行。 } **&** # {} 这部分语句被放入后台作为一个子进程执行,所以不必每次等待3秒后执行 #下一个,这部分的echo $i几乎是同时完成的,当fifo中13个空行读完后 for循环 # 继续等待 read 中读取fifo数据,当后台的13个子进程等待3秒后,按次序 # 排队往fifo输入空行

python并发编程知识点总结

耗尽温柔 提交于 2019-12-10 03:51:58
1.到底什么是线程?什么是进程? Python自己没有这玩意,Python中调用的操作系统的线程和进程. 2.Python多线程情况下: 计算密集型操作:效率低,Python内置的一个全局解释器锁,锁的作用就是保证同一时刻一个进程中只有一个线程可以被cpu调度,多线程无法利用多核优势,可以通过多进程方式解决,但是比较浪费资源. IO操作:效率高 3.Python多进程的情况下: 计算密集型操作:效率高(浪费资源),不得已而为之. IO操作:效率高(浪费资源) 4.为什么有这把GIL锁? Python语言的创始人在开发这门语言时,目的快速把语言开发出来,如果加上GIL锁(C语言加锁),切换时按照100条字节指令来进行线程间的切换. 5.Python中线程和进程(GIL锁) GIL锁,全局解释器锁.用于限制一个进程中同一时刻只有一个线程被cpu调度. 扩展:默认GIL锁在执行100个cpu指令(过期时间). 查看GIL切换的指令个数 import sys v1 = sys.getcheckinterval() print(v1) 6.为什么要创建线程? 由于线程是cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(Java/C#). 注意:线程是为了工作. 7.为什么要创建进程? 进程和进程之间做数据隔离(Java/C#). 注意:进程是为了提供环境让线程工作. 8

Android进阶学习第三天(一)IPC简介和Android中的多进程

拈花ヽ惹草 提交于 2019-12-09 21:48:37
IPC也就是Inter-Process Communication,含义是进程通信,是指两个进程之间进行数据交换的过程。 什么是线程?什么是进程? 线程是CUP调度的最小单元,是一种有限的系统资源,进程一般指一个执行单元,在PC或者移动端上一般指一个程序或者应用。进程与线程是包含关系。一个进程可以包含多个线程,但最低要有一条线程。即主线程(Android中的UI线程),很多时候,如果主线程执行大量耗时任务,就会造成界面无响应,Android 一般主线程阻塞超过5秒,则会报ANR异常。也就是应用无响应。 在任何操作系都中都需要有对应的IPC机制。 Android中IPC使用的场景基本有以下几种。 1,有些模块特殊需要放在单独进程的。 2,通过多进程获取多份内存空间。(Android对单个应用所使用的最大内存做了限制) 3,当前应用需要向其他应用获取数据。 Android中的多进程 四大组件在配置文件中(AndroidManifest.XML)中配置android:process属性,属性值就是进程的名字,其中以:开头的含义是指要在当前线程名头上加上包名。其次以:开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一进程。不以:开头的进程属于全局进程,其他应用都可以通过ShareUID和它跑在同一进程。 多进程模式的运行机制

Linux进程线程初探(多进程与进程间通信-管道)

霸气de小男生 提交于 2019-12-09 20:50:32
先上一个多进程的简单多进程实例,此实例将在同一个程序中创建两个进程: /* 程序说明: 创建两个进程,进程一执行”ls -l“操作,进程二做sleep操作 主进程阻塞等待进程1结束,再等待进程2结束,程序结束 */ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> int main() { pid_t child1,child2; child1 = fork(); //进程1 if(child1 == -1){ perror("child1 creat error:"); exit(1); }else if(child1 == 0){ if(execlp("ls","ls","-l",NULL) < 0){ perror("execlp error:"); exit(1); } exit(0); } child2 = fork(); //进程2 if(child2 == -1){ perror("child2 creat error:"); exit(1); }else if(child2 == 0){ sleep(3); exit(0); } // waitpid(child1,NULL,0); 主进程 wait(0);

GIL以及协程

左心房为你撑大大i 提交于 2019-12-09 19:25:08
GIL以及协程 一、GIL全局解释器锁 演示 ''' python解释器: - Cpython c语言 - Jpython java 1、GIL:全局解释器锁 - 翻译:在同一个进程下开启的多个线程,同一时刻只能有一个线程执行,因为Cpython的内存管理不是线程安全。 - GIL全局解释器锁,本质上就是一把互斥锁,保证数据安全 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.) 结论:在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多多核优势。 GIL全局解释器的优缺点: 优点: 保证数据的安全 缺点: 单个进程下,开启多个线程

python 基于mmap模块的jsonmmap实现本地多进程内存共享

喜夏-厌秋 提交于 2019-12-09 16:24:48
python 基于mmap模块的jsonmmap实现本地多进程内存共享 ###1.概述 共享内存可以说是最有用的进程间通信方式.两个不用的进程共享内存的意思是:同一块物理内存被映射到两个进程的各自的进程地址空间.一个进程可以及时看到另一个进程对共享内存的更新,反之亦然.采用共享内存通信的一个显而易见的好处效率高,因为进程可以直接读写内存,而不需要任何数据的复制.对于向管道和消息队列等通信等方式,则需要在内核和用户空间进行四次的数据复制,而共享内存则只需要两次数据复制:一次从输入文件到共享内存区,另一个从共享内存区到输出文件.实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域.而是保持共享区域,知道通信完毕为止,这样,数据内容就一直保存在共享内存中,并没有写回文件.共享内存中的内容往往是在解除映射时才写回文件的.因此,采用共享内存的通信方式效率非常高. mmap系统调用是的是的进程间通过映射同一个普通文件实现共享内存.普通文件被映射到进程地址空间后,进程可以向像访问普通内存一样对文件进行访问,不必再调用read,write等操作.与mmap系统调用配合使用的系统调用还有munmap,msync等. 实际上,mmap系统调用并不是完全为了用于共享内存而设计的.它本身提供了不同于一般对普通文件的访问方式

Http中的三种请求处理模式(MPM)的区别

拥有回忆 提交于 2019-12-08 20:35:33
MPM---包括基于事件/异步,线程化和预分叉 MPM(multi-processing module)多种请求处理模式,分为三种工作模式: prefork worker event prefork---多进程I/O模型,每个进程响应一个请求 Prefork MPM: 预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景 优点:稳定 缺点:慢,占用资源,不适用于高并发场景 这个多处理模块(MPM)实现了一个非线程的、预先分叉的web服务器。每个服务器进程可以响应传入的请求,父进程管理服务器池的大小。它适用于那些为了与非线程安全的库兼容而需要避免线程化的站点。它也是隔离每个请求的最佳MPM,因此单个请求的问题不会影响任何其他请求。此MPM具有很强的自我调节能力,因此很少需要调整其配置指令。最重要的是MaxRequestWorkers足够大,可以处理您希望接收的所有并发请求,但又足够小,可以确保所有进程都有足够的物理RAM。 worker---复用的多进程I/O模型,多进程多线程 一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n 是一种多进程和多线程混合的模型,有一个控制进程

python面试题及答案 2019

 ̄綄美尐妖づ 提交于 2019-12-06 16:54:13
利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法. 正解1: def trim(s): while s[:1] == ' ': s = s[1:] while s[-1:] == ' ': s = s[:-1] return s 正解2: def trim(s): if s[:1] == ' ': s = trim(s[1:]) if s[-1:] == ' ': s = trim(s[:-1]) return s 容易写错的方法: def trim(s): while s[0] == ' ': s = s[1:] while s[-1] == ' ': s = s[:-1] return s 解释:当s=''时,s[0]和s[-1]会报IndexError: string index out of range,但是s[:1])和s[-1:]不会。 请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间. # -*- coding: utf-8 -*- import time, functools def metric(fn): @functools.wraps(fn) def wrapper(*args, **kw): time0 = time.time() ret = fn(*args, **kw)

八、进程、线程和协程

≡放荡痞女 提交于 2019-12-06 16:24:13
     进程概念:进程,是计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。即执行中的程序是进程,例如qq不是进程,当qq运行的时候,就是一个进程   线程概念:线程,有时被称为轻量级进程,是程序执行流的最小单元。可以理解为,线程是属于进程的,平时写的简单程序是单线程的,多线程和多线程的区别在于多线程可以同时处理多个任务。   进程之间的内存独立,而属于同一个进程多个线程之间的内存是共享的,多个线程可以直接对他们所在进程的内存数据进行读写并在线程间进行交换。   协程概念:协程是一种用户态的轻量级线程,如果说多进程对于多cpu,多线程对于多核cpu,那么事件驱动和协程则是在充分挖掘不断提高性能的单核cpu的潜力,既可以利用异步优势,又可以避免反复系统调用,还有进程切换造成的开销。协程也是单线程,但是它能让原来要使用异步+回调方式写的代码,可以用看似同步的方式写出来,他是实现推拉互动的所谓非抢占式协作的关键。对于python来说,由于python多线程中解释器导致的同时只能有一个线程访问cpu,所以对协程需求就相比其他语言更为紧迫。   多进程:多个任务,比如音乐,word等   多线程:在进程内部做多件事,即多个子任务,比如word里的打字、打印等同时进行   多任务实现的3种方式:   多进程模式   多线程模式   多进程

PHP 多进程和多线程的优缺点

笑着哭i 提交于 2019-12-06 14:23:11
PHP 多进程和多线程的优缺点 多进程 1.使用多进程, 子进程结束以后, 内核会负责回收资源 2.使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程. 3.一个常驻主进程, 只负责任务分发, 逻辑更清楚. 4.多进程方式更加稳定,另外利用进程间通信(IPC)也可以实现数据共享。 5.共享内存,这种方式和线程间读写变量是一样的,需要加锁,会有同步、死锁问题。 6.消息队列,可以采用多个子进程抢队列模式,性能很好 多线程 1.线程是在同一个进程内的,可以共享内存变量实现线程间通信 2.线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源 3.多线程也存在一些问题: 4.线程读写变量存在同步问题,需要加锁 5.锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁 6.同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁 7.某个线程发生致命错误会导致整个进程崩溃 以上是文章全部内容,有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的。感谢阅读! 点击加入此群 来源: https://www.cnblogs.com/heyue0117/p/11989558.html