转载:
详细介绍 进程、线程和协程的区别,和协程
详解 进程、线程和协程的区别
首先,给出“进程、线程和协程”的特点:
进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度;
线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度;
协程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,协程由程序员在协程的代码里显示调度。
接下来,以一个形象的例子,进一步讲述“进程、线程和协程”三者之间的区别:
假设有一个单核的操作系统,系统上没有其它的程序需要运行,现有两个线程 A 和 B,A 和 B 在单独运行时都需要 10 秒来完成自己的任务,而且任务都是运算操作,线程 A 和 B 之间没有竞争和共享数据的问题。现在让 A 和 B 两个线程并行,则操作系统会不停的在 A 和 B 两个线程之间切换,达到一种伪并行的效果。
如果操作系统切换的频率是每秒一次,切换的成本是 0.1 秒(主要是栈切换),则总共需要 20 + 19 * 0.1 = 21.9 秒;如果使用协程的方式,可以先运行协程 A,A 结束的时候让位给协程 B,只发生一次切换,则总共需要 20 + 1 * 0.1 = 20.1 秒。如果操作系统是双核的,而且线程是标准线程,那么线程 A 和 B 可以达到真的并行,则总时间为 10 秒;而协程的方式仍然需要 20.1 秒的时间。
分享到:
相关推荐
在Python中,虽然GIL限制了多线程的并行性能,但仍然可以通过多进程或者其他并发模型如协程来利用多核处理器的优势。协程将在另一个层次上讨论,它们允许无须线程切换地实现轻量级并发,通常在IO密集型任务中表现得...
对python并发进行的笔记整理,个人所学习使用,主要包括多进程,多线程,协程,IO多路复用,进程线程通信等
// 一个进程可以创建和撤销多个线程 同一个进程中的多个线程之间可以并发执行 //并发 并行 //多线程程序在单核心的cpu上运行 称为并发 //多线程程序在多核心的cpu上运行 称为并行 //并发与并行并不相同 并发主要是由...
操作系统进程、线程、协程之间的关系 操作系统进程、线程、协程是计算机科学中三个密切相关的概念,它们之间存在着紧密的联系,都是操作系统中重要的组成部分。下面我们将详细介绍进程、线程、协程之间的关系。 一...
在Python编程中,进程、线程和协程是并发执行任务的重要概念,它们各自有其特点和适用场景。 首先,进程是操作系统分配资源的基本单位,每个进程都有自己独立的内存空间,包括堆和栈,这意味着进程间无法直接共享...
在Python编程中,多协程、多线程和多进程是实现并发执行任务的重要机制,它们可以帮助我们提高程序的执行效率,充分利用系统资源。本文将深入探讨这些概念以及它们在Python中的实现方式。 首先,我们要了解并发的...
在计算机科学中,进程、线程和协程是操作系统中执行任务的基本单元,它们对于理解和优化软件性能至关重要。下面将详细解释这些概念及其相互关系。 首先,我们来谈谈"进程"。进程是操作系统中运行的一个应用程序实例...
Python中的线程、进程和协程是并发执行任务的关键概念,它们在多任务处理和优化程序性能方面扮演着重要角色。 一、进程 进程是操作系统分配资源的基本单位,每个进程都有独立的内存空间,包括代码、数据和栈空间。...
Python七大类常见深度问题详解: Python类三种方法,函数传参,类与实例...Python 进程线程协程 GIL 闭包 与高阶函数(五) Python中深浅拷贝 垃圾回收与 super继承(六) Python 调度算法 死锁 静动态链接 分页分段(七)
栈在进程、线程和协程中扮演着至关重要的角色。每个执行单元都有自己的栈,用于存储局部变量、函数调用参数和返回地址等信息。当执行单元切换时,就需要保存当前栈的状态,并恢复目标执行单元的栈状态。在进程和线程...
在IT领域,特别是软件开发中,进程、线程和协程是并发编程中的核心概念,它们用于优化系统资源的利用,提高程序的执行效率。在Python中,这些概念的运用和实现方式对于理解和编写高效的多任务应用至关重要。 一、...
网络编程(TCP/IP、套接字、进程、线程、协程)
初学者学习python代码,主要是为了自己后期查看,比较基础-并行:真的多任务 并发:假的多任务 ...协程依赖于线程,线程依赖于进程,协程切换需要资源相当少,所以效率就会很高 重构:把现在代码推倒,重新写
python提高 主要进程线程协程 网络编程 生成器迭代器装饰器
进程、线程和协程是计算机程序执行的三种基本单元,它们在多任务处理和并发执行方面具有不同的特性和用途。下面将详细阐述这三者的概念、特点以及它们之间的区别。 1. 进程(Process) 进程是操作系统资源分配的...
读数据,从而实现进程间的通信。 在Python中,多进程处理可以通过`multiprocessing`模块实现,这个模块提供了一个`Process`类,用于创建和管理进程。在创建子进程时,我们只需要定义一个函数,该函数将在子进程中...