本文介绍进程、线程、协程的概念 。
预备知识
程序的定义:由若干条具有一定功能的指令所组成的解题顺序和步骤 。
早期的计算机只能跑单道程序,同一时间段内,各种资源(CPU,内存,硬盘,I/O)被当前跑的程序占用 。
后期计算机引入了多道程序,同一时刻,有多个程序并发的运行 。
问题:内存中同时放入多道程序,各个程序的代码、运算数据存放的位置不同 。操作系统要怎么才能找到各程序的存放位置呢?
解决:为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念 。系统为每个运行的程序配置一个数据结构,称为集成控制(PCB),用来描述集成的各种信息(如程序代码存放的位置),PCB、程序段、数据段三部分构成了进程实体(进程映像) 。
进程的定义:
进程是程序的一次执行过程 。
进程是一个程序及其数据在处理机上顺序执行时所发生的活动 。
进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位 。
进程的组成:
文章插图
进程的组成 [01]
PCB介绍:
文章插图
PCB介绍
进程的特征:
文章插图
进程的特征
Python创建进程:
- os.fork() 方法
- Process方法
- Pool方法
- 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念 。
- 而进程是程序在处理机上的一次执行过程,它是一个动态的概念 。
- 程序可以作为一种软件资料长期存在,而进程是有一定生命期的 。
- 程序是永久的,进程是暂时的 。
现代操作系统在运行一个程序时,会为其创建一个进程 。例如,启动一个JAVA程序,操作系统就会创建一个Java进程 。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量 。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行 。
一个Java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上Java程序天生就是多线程程序,因为执行main()方法的是一个名称为main的线程 。
为什么要使用多线程?
执行一个简单的“Hello, World!”,却启动了那么多的“无关”线程,是不是把简单的问题复杂化了?当然不是,因为正确使用多线程,总是能够给开发人员带来显著的好处,而使用多线程的原因主要有以下几点 。
(1)更多的处理器核心
随着处理器上的核心数量越来越多,以及超线程技术的广泛运用,现在大多数计算机都比以往更加擅长并行计算,而处理器性能的提升方式,也从更高的主频向更多的核心发展 。如何利用好处理器上的多个核心也成了现在的主要问题 。
线程是大多数操作系统调度的基本单元,一个程序作为一个进程来运行,程序运行过程中能够创建多个线程,而一个线程在一个时刻只能运行在一个处理器核心上 。试想一下,一个单线程程序在运行时只能使用一个处理器核心,那么再多的处理器核心加入也无法显著提升该程序的执行效率 。相反,如果该程序使用多线程技术,将计算逻辑分配到多个处理器核心上,就会显著减少程序的处理时间,并且随着更多处理器核心的加入而变得更有效率 。
(2)更快的响应时间
有时我们会编写一些较为复杂的代码(这里的复杂不是说复杂的算法,而是复杂的业务逻辑),例如,一笔订单的创建,它包括插入订单数据、生成订单快照、发送邮件通知卖家和记录货品销售数量等 。用户从单击“订购”按钮开始,就要等待这些操作全部完成才能看到订购成功的结果 。但是这么多业务操作,如何能够让其更快地完成呢?
在上面的场景中,可以使用多线程技术,即将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列),如生成订单快照、发送邮件等 。这样做的好处是响应用户请求的线程能够尽可能快地处理完成,缩短了响应时间,提升了用户体验 。
推荐阅读
- 被隔离没钱交费怎么办?
- 单线程性能秒杀多线程!多路复用IO实现高性能网络服务
- Linux 查看进程的动态信息
- 取代H.265/HEVC!H.266编解码标准发布:视频清晰度不变、数据量减半
- 素食的八大好处!看看科学怎么说
- 久用电脑眼睛干涩 就吃这七种果蔬
- 红茶、绿茶、乌龙茶各用什么茶具泡茶?[红茶]
- 红茶含硒吗?[红茶]
- 老电脑升级加固态硬盘还是内存、CPU、显卡?旧电脑升级硬件建议
- 轻薄、办公、高性能,这四款笔记本满足学生党所有需求