一、基本概念
进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
简单总结:
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
 
二、 单线程
程序执行时,所走的程序路劲按照联连续顺序排下去,前面的处理完后,后面的才会执行
举个栗子
#单线程
 1 from time import sleep,ctime
2 def talk():
3 print("stark talk %r" %ctime())
4 sleep(2)
5 def write():
6 print("stark write %r" %ctime())
7 sleep(3)
8 talk()
9 write()
10 print("all and! at %r" %ctime())
查看结果-顺序执行

三、多线程

 1 from time import sleep,ctime
2 import threading
3
4 def talk(content,loop):
5 for i in range(loop):
6 print("stark talk %s %s" %(content,ctime()))
7 sleep(3)
8
9 def write(content,loop):
10 for i in range(loop):
11 print("stark write %s %s" %(content,ctime()))
12 sleep(5)
13 #定义和加载说和写的线程
14 threads=[]
15 t1=threading.Thread(target=talk,args=('hello world',2))
16 threads.append(t1)
17 t2=threading.Thread(target=write,args=('life is short you need python',2))
18 threads.append(t2)
19 #执行多线程
20 for t in threads:
21 t.start()
22 for t in threads:
23 #线程守护
24 t.join()
25 print("all threads end! at %r" %ctime())
查看执行结果-读写并发
 
 
四、多进程
 1 from time import sleep,ctime
2 import multiprocessing
3
4 def talk(content,loop):
5 for i in range(loop):
6 print("stark talk %s %s" %(content,ctime()))
7 sleep(2)
8
9 def write(content,loop):
10 for i in range(loop):
11 print("stark write %s %s" %(content,ctime()))
12 sleep(3)
13 #定义和加载说和写的进程
14 process=[]
15 p1=multiprocessing.Process(target=talk,args=('hello world',2))
16 process.append(p1)
17 p2=multiprocessing.Process(target=write,args=('life is short you need python',2))
18 process.append(p2)
19 #调用进程
20 if __name__=='__main__':
21 for t in process:
22 t.start()
23 for t in process:
24 #进程守护
25 t.join()
26 print("all process end! at %r" %ctime())
查看执行结果-读写并发

 

python之单线程、多线程、多进程的更多相关文章

  1. python学习之多线程多进程

    python基础 进程&线程 进程是一组资源的集合,运行一个系统就是打开了一个进程,如果同时打开了两个记事本就是开启了两个进程,进程是一个笼统的概念,进程中由线程干活工作,由进程统一管理 一个 ...

  2. 为什么在Python里推荐使用多进程而不是多线程

    转载  http://bbs.51cto.com/thread-1349105-1.html 最近在看Python的多线程,经常我们会听到老手说:"Python下多线程是鸡肋,推荐使用多进程 ...

  3. 为什么在Python里推荐使用多进程而不是多线程?

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?   要知其然,更要知其所以然.所以有了下面的深入研究: 首先强调背景: 1. ...

  4. 为什么在Python里推荐使用多进程而不是多线程?(为什么python多线程无法增加CPU使用率?)

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: 首先强调背景:     ...

  5. python之路-----多线程与多进程

    一.进程和线程的概念 1.进程(最小的资源单位): 进程:就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 程序:我们编写的程序用来描述进程要完成哪些功能以 ...

  6. 为什么在python中推荐使用多进程而不是多线程(转载)

    最近在看Python的多线程,经常我们会听到老手说:"Python下多线程是鸡肋,推荐使用多进程!",但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: GI ...

  7. Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

  8. python(34):为什么在Python里推荐使用多进程而不是多线程?

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?                  要知其然,更要知其所以然.所以有了下面的深 ...

  9. python学习笔记(十三): 多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

  10. python基础之多线程与多进程(二)

    上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...

随机推荐

  1. 一招MAX降低10倍,现在它是我的了

    一.背景 性能优化是一场永无止境的旅程. 到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点. C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询R ...

  2. SpringBoot CORS 跨域请求解决方案之配置过滤器

    方式一:@CrossOrigin 方式二: @Configuration public class CorsConfig implements WebMvcConfigurer { @Override ...

  3. C#设计模式之享元模式(Flyweight)

    using System; using System.Collections; public class Client { public static void Main(string[] args) ...

  4. Windows Server 2008 R2 & Windows Server 2012 R2 无法通过update更新的解决方法

    windows Server 2008 r2 无法通过update更新的解决方法 注意:目前windows Server系列操作系统已经完全停止支持. 1.安装 SP1补丁 KB976932 点击:微 ...

  5. Ubuntu 命令使用方法

    apt-get 用作于deb包 yum作用于tar包(也可以运作于rpm包) 首先用yum list wget检查一下你的虚拟机有没有安装wget,如果安装了下面图中会显示 @dvd ,我的没有安装所 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (177)-- 算法导论13.3 6题

    六.用go语言,说明如果红黑树的表示中不提供父指针,应当如何有效地实现 RB-INSERT. 文心一言: 红黑树是一种自平衡的二叉搜索树,其中每个节点都包含一个颜色属性(红色或黑色),并且满足以下性质 ...

  7. bazel 使用 gtest/gmock 报错 Constraints from @bazel_tools//platforms have been removed

    问题描述 运行 bazel test 命令,遇到错误:"Constraints from @bazel_tools//platforms have been removed. Please ...

  8. 2023-05-14:你的赛车可以从位置 0 开始,并且速度为 +1 ,在一条无限长的数轴上行驶, 赛车也可以向负方向行驶, 赛车可以按照由加速指令 ‘A‘ 和倒车指令 ‘R‘ 组成的指令序列自动行驶

    2023-05-14:你的赛车可以从位置 0 开始,并且速度为 +1 ,在一条无限长的数轴上行驶, 赛车也可以向负方向行驶, 赛车可以按照由加速指令 'A' 和倒车指令 'R' 组成的指令序列自动行驶 ...

  9. 避坑指南:关于SPDK问题分析过程

    [前言] 这是一次充满曲折与反转的问题分析,资料很少,代码很多,经验很少,概念很多,当内核态,用户态,DIF,LBA,大页内存,SGL,RDMA,NVME和SSD一起迎面而来的时候,问题是单点的意外, ...

  10. 掌数科技携手华为云GaussDB,助力金融科技创新,联合打造行业标杆

    本文分享自华为云社区<掌数科技携手华为云GaussDB,助力金融科技创新,联合打造行业标杆>,作者:GaussDB 数据库 . 近日,在华为开发者大会2023(Cloud)的"G ...