python中线程和进程有何区别

引入进程和线程的概念及区别

threading模块提供的类:

Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。

1.什么是进程

计算机程序只不过是磁盘中可执行的二进制(或其他类型)的数据。它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期。

进程(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间、内存、数据栈及其它记录其运行轨迹的辅助数据。

操作系统管理在其上运行的所有进程,并为这些进程公平的分配时间,进程也可以通过fork和spawn操作来完成其它的任务。

不过各个进程有自己的内存空间、数据栈等,所以只能使用进程间通讯,而不能直接共享信息。

2.线程的基本概念

线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

 3、线程和进程的关系以及区别?

进程和线程的关系:

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。

(3)处理机分给线程,即真正在处理机上运行的是线程

(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.

进程与线程的区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行

(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

知识点补充:

  • 进程是资源分配的单位
  • 线程是操作系统调度的单位
  • 协程,又称微线程,纤程,协程的切换只是单纯的操作CPU的上下文,资源很小,效率高
  • 进程切换需要的资源很最大,效率很低
  • 一个程序至少有一个进程,一个进程至少有一个线程
  • 线程执行开销小,但不利于资源的管理和保护;而进程正相反

到此这篇关于python中线程和进程有何区别的文章就介绍到这了,更多相关python中线程和进程的区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现多线程/多进程的TCP服务器

    多线程的TCP服务器,供大家参考,具体内容如下 背景:同学公司的传感器设备需要将收集的数据发到服务器上,前期想写一个简单的服务器来测试下使用效果,设备收集的数据非常的重要,所以考虑使用TCP协议来实现. 因为只是测试使用,所以采用多线程的方式,毕竟节省资源嘛(使用协程时会导致I/O阻塞) 开门见山,直接搬上来了 一.tcp_server_v1.0使用说明: 1.运行环境:python3解释器,并安装socket.threading模块: 2.该版本使用多线程实现的多任务: 3.支持多台设备同时连

  • Python队列、进程间通信、线程案例

    进程互斥锁 多进程同时抢购余票 # 并发运行,效率高,但竞争写同一文件,数据写入错乱 # data.json文件内容为 {"ticket_num": 1} import json import time from multiprocessing import Process def search(user): with open('data.json', 'r', encoding='utf-8') as f: dic = json.load(f) print(f'用户{user}查看

  • Python多线程多进程实例对比解析

    多线程适合于多io操作 多进程适合于耗cpu(计算)的操作 # 多进程编程 # 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程 import time from concurrent.futures import ThreadPoolExecutor, as_completed from concurrent.futures import ProcessPoolExecutor def fib(n): if n <= 2: return 1 return fib(n - 2)

  • python Event事件、进程池与线程池、协程解析

    Event事件 用来控制线程的执行 出现e.wait(),就会把这个线程设置为False,就不能执行这个任务: 只要有一个线程出现e.set(),就会告诉Event对象,把有e.wait的用户全部改为True,剩余的任务就会立马去执行.由一些线程去控制另一些线程,中间通过Event. from threading import Event from threading import Thread import time # 调用Event实例化出对象 e = Event() # # # 若该方法

  • python 在threading中如何处理主进程和子线程的关系

    之前用python的多线程,总是处理不好进程和线程之间的关系.后来发现了join和setDaemon函数,才终于弄明白.下面总结一下. 1.使用join函数后,主进程会在调用join的地方等待子线程结束,然后才接着往下执行. join使用实例如下: import time import random import threading class worker(threading.Thread): def __init__(self): threading.Thread.__init__(self

  • Python全局锁中如何合理运用多线程(多进程)

    Python全局锁 (1)全局锁导致的问题 全局锁的英文简称是GIL,全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定,每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行. 每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念.但并发和并行

  • python线程安全及多进程多线程实现方法详解

    进程和线程的区别 进程是对运行时程序的封装,是系统资源调度和分配的基本单位 线程是进程的子任务,cpu调度和分配的基本单位,实现进程内并发. 一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存 什么是线程安全 一个线程的修改被另一个线程的修改覆盖掉. python中哪些操作是线程安全的 一个操作可以在多线程环境中使用,并且获得正确的结果. 线程安全的操作线程是顺序执行的而不是并发执行的. 一般涉及到写操作需要考虑如何让多个线程安全访问数据. 线程同步的方式 互斥量(锁): 通过互斥机制防

  • python中线程和进程有何区别

    引入进程和线程的概念及区别 threading模块提供的类: Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local. 1.什么是进程 计算机程序只不过是磁盘中可执行的二进制(或其他类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期. 进程(有时被称为重量级进程)是程序的一次执行.每个进程都有自己的地址空间.内存.数据栈及其它记录其运行轨迹的辅助数据. 操作系统管理在其上运行的所有

  • 深入了解Python 中线程和进程区别

    目录 一.什么是进程/线程 1.引论 2.线程 3.进程 4.区别 5.使用 二.多线程使用 1.常用方法 2.常用参数 3.多线程的应用 3.1重写线程法 3.2直接调用法 4.线程间数据的共享 三.多进程使用 1.简介 2.应用 2.1重写进程法 2.2直接调用法 3.进程之间的数据共享 3.1Lock方法 3.2Manager方法 四.池并发 1.语法 2.获取CPU数量 3.线程池 3.进程池 一. 什么是进程 / 线程 1. 引论 众所周知,CPU是计算机的核心,它承担了所有的计算任务

  • 改变 Python 中线程执行顺序的方法

    一.主线程会等待所有的子线程结束后才结束 首先我看下最普通情况下,主线程和子线程的情况. import threading from time import sleep, ctime def sing(): for i in range(3): print("正在唱歌...%d" % i) sleep(1) def dance(): for i in range(3): print("正在跳舞...%d" % i) sleep(1) if __name__ == '

  • Python中线程threading.Thread的使用详解

    目录 1. 线程的概念 2. threading.thread()的简单使用 2.1 添加线程可以是程序运行更快 2.2 主线程会等待所有的子线程结束后才结束 3.查看线程数量 4.线程参数及顺序 4.1 传递参数的方法 4.2 线程的执行顺序 5. 守护线程 1. 线程的概念 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统独立调度和

  • 在Python中获取操作系统的进程信息

    本文主要介绍在 Python 中使用 psutil 获取系统的进程信息. 1 概述 psutil 是 Python 的一个进程和系统工具集模块,通过使用 psutil,我们可以在 Python 中获取操作系统中进程的相关信息. 本文中使用的 rpm 包为: python2-psutil.x86_64,该 rpm 包定义如下: python2-psutil.x86_64 : A process and system utilities module for Python 2 代码示例 下面给出一个

  • Python中线程锁的使用介绍

    目录 前言 方式一:使用try/finally,确保锁肯定会被释放. 方式二:with语句避免使用try/finally. 总结 前言 当有多个线程,且它们同时访问同一资源时,需要考虑如何避免线程冲突.解决办法是使用线程锁.锁由Python的threading模块提供,并且它最多被一个线程所持有.当一个线程试图获取一个已经锁在资源上的锁时,该线程通常会暂停运行,直到这个锁被释放.看看下面的不具备锁功能的例子: #!/usr/bin/env python3 # -*- coding:utf-8 -

  • 对于Python中线程问题的简单讲解

    我们将会看到一些在Python中使用线程的实例和如何避免线程之间的竞争.你应当将下边的例子运行多次,以便可以注意到线程是不可预测的和线程每次运行出的不同结果.声明:从这里开始忘掉你听到过的关于GIL的东西,因为GIL不会影响到我想要展示的东西. 示例1 我们将要请求五个不同的url: 单线程 import time import urllib2 def get_responses(): urls = [ 'http://www.google.com', 'http://www.amazon.co

  • Python中线程的MQ消息队列实现以及消息队列的优点解析

    "消息队列"是在消息的传输过程中保存消息的容器.消息队列管理器在将消息从它的源中继到它的目标时充当中间人.队列的主要目的是提供路由并保证消息的传递:如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它.相信对任何架构或应用来说,消息队列都是一个至关重要的组件,下面是十个理由: Python的消息队列示例: 1.threading+Queue实现线程队列 #!/usr/bin/env python import Queue import threading import

  • Python中线程编程之threading模块的使用详解

    threading.Thread Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.下面分别举例说明.先来看看通过继承threading.Thread类来创建线程的例子: #coding=gbk import threading, time, random count = 0 cl

  • Python中Threading用法详解

    Python的threading模块松散地基于Java的threading模块.但现在线程没有优先级,没有线程组,不能被销毁.停止.暂停.开始和打断. Java Thread类的静态方法,被移植成了模块方法. main thread: 运行python程序的线程 daemon thread 守护线程,如果守护线程之外的线程都结束了.守护线程也会结束,并强行终止整个程序.不要在守护进程中进行资源相关操作.会导致资源不能正确的释放.在非守护进程中使用Event. Thread 类 (group=No

随机推荐