进程、线程、进程池、进程三态、同步、异步、并发、并行、串行

简介: 1.🌵进程🍹什么是进程?

一进程, 线程

1.🌵进程

🍹什么是进程?

  • 开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。
  • 明白点: 当我们运行一个程序,那么我们将运行的程序叫进程。

👉精简重点👈

进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程
        是最小的资源管理单元
  • 进程是线程的容器

🍹程序与进程的区别

  • 程序是数据和指令的集合, 是一个静态的概念, 就是一堆代码, 可以长时间的保存在系统中
  • 进程是程序运行的过程, 是一个动态的概念, 进程存在着生命周期, 也就是说进程会随着程序的终止而销毁, 不会永久存在系统中

🍹进程之间交互

  • 进程之间通过 TCP/IP 端口实现

2.🌵线程

🍹什么是线程

  • 线程是操作系统能够进行运算调度的最小单位
  • 它被包含在进程之中,是进程中的实际运作单位
  • 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

👉精简重点👈

是进程的一条流水线, 只用来执行程序,而不涉及到申请资源, 是程序的实际执行者
        最小的执行单元

🍹线程之间交互

  • 多个线程共享同一块内存,通过共享的内存空间来进行交互

3.🌵进程与线程的关系

🍹例子:

我们打开一个聊天软件,这就是开启了一个进程
        当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置...,这些操作就是线程
        所以可以说 "进程" 包含 "线程", "线程" 是 "进程" 的子集

🍹进程是线程的容器

工厂流水线例子:


4.🌵总结

  • 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位
  • 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位
  • 进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.
  • 一个程序至少有一个进程,一个进程至少有一个线程.
  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.

二.并行, 并发, 串行

  • 并发: 多个任务看起来是同时进行, 这是一种假并行
单核下使用多道技术实现


  • 并行: 多个任务同时进行
并行必须有多核才能实现,否则只能实现并发(伪并行)


  • 串行: 一个程序完完整整的运行完,再运行下一个进程


四.任务运行的三种状态

进程在运行的过程中不断地改变其运行状态
        通常一个运行的进程必须具有三种状态:就绪态, 运行态, 阻塞态

1.就绪态 (Ready)

  • 当进程已分配到除CPU以外的所有必要的资源后,只要再获得CPU, 便可执行程序, 进程这时的状态就称为就绪态,
  • 在一个系统中处于就绪态的进程可能有多个, 通常将他们排成一个队列, 这就叫就绪队列

2.运行态 (Running)

  • 当进程已经获得CPU操作权限, 其程序正在运行, 着就叫做运行态
  • 在单核操作系统中, 只有一个进程处于运行态, 多核操作系统有多个进程处于运行态

3.阻塞态 (Blocked)(sleep)

  • 正在执行的进程, 由于等待某个事件而无法执行时, 便被操作系统剥夺了cpu的操作时间, 这是就是阻塞态
  • 引起阻塞的原因多种, 例如: 等待I/O操作, 更高优先级的任务抢走了CPU权限等.

4.进程三种状态 间的转换

一个进程在运行期间, 会不断地在一种状态切换到另一只种状态
        他可以是多次处于就绪态和运行态, 也可以多次处于阻塞态, 下图是三种状态的转换图


  • 就绪态➠➠运行态
处于就绪态的进程, 当进程调度程序为之分配了CPU的时间片后, 该进程就会由就绪态转变成运行态
  • 运行态➠➠就绪态
处于运行态的进程在运行过程中, 因为分配的时间片用完了, 于是失去了CPU的使用权限, 运行态就会重新转为就绪态
  • 运行态➠➠阻塞态
正在运行的进程由于遇到I/O操作或被更高优先级的任务抢走CPU使用权限而无法继续执行, 便从运行态转为阻塞态
  • 阻塞态➠➠就绪态
处于阻塞态的进程, 若其等待的事情已经处理完毕, 于是进程从阻塞态转为就绪态

四.任务提交的两种方式

1.同步

  • 同步是指发送方发送数据后, 等接收方发回响应后才发下一个数据报的通讯方式
  • 同步是指两个程序的运行是相关的, 其中一个线程在阻塞需要等待状态, 那另一个线程才运行

2.异步

  • 异步是指发送方发出数据后, 不等接收方发回响应, 接着就发下个数据报的通讯方式
  • 异步是指两个线程毫无相关, 自己运行自己的

3.例子

  • 同步
❶你叫我去吃饭, 我听到了就立即和你去吃饭, 如果没有听到, 你就不停的叫, 直到我告诉你听到了, 才一起去吃饭
❷打电话好比同步, 两边是同时进行不能再打给另一个人
  • 异步
❶你叫我去吃饭, 然后自己去吃饭了, 我得到消息后可能立即走, 也可能过会儿走
❷发消息好比异步, 和一个人发完消息就可能和另一个人发消息

五.进程池

1.什么是进程池?

  • 👉进程池是资源进程, 管理进程组成的技术的应用.

2.为什么要有进程池?

😮忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。
        😒那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?
        😓首先,创建进程需要消耗时间,销毁进程也需要消耗时间。
        😟第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。
        😥因此我们不能无限制的根据任务去开启或者结束进程。那么我们要怎么做呢?

3.进程池的概念

  • 😺定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务
  • 😸等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务
  • 😹如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。
  • 😻也就是说,进池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行
  • 😼这样不会增加操作系统的调度难度,还节省了开关进程的时间,也一定程度上能够实现并发效果

4.资源进程

  • 👉预先创建好的空闲进程,管理进程(好比池子🏊)会把工作分发到空闲进程来处理。

5.管理进程🏊

  • 👉管理进程负责创建资源进程,把工作交给空闲资源进程处理,回收已经处理完工作的资源进程。
  • 资源进程与管理进程的交互
😱管理进程如何有效的管理资源进程,分配任务给资源进程?
        👉通过IPC,信号,信号量,消息队列,管道等进行交互。
相关文章
|
9月前
|
数据采集 存储 JSON
Python爬取知乎评论:多线程与异步爬虫的性能优化
Python爬取知乎评论:多线程与异步爬虫的性能优化
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
1182 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
9月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
缓存 安全 Java
面试中的难题:线程异步执行后如何共享数据?
本文通过一个面试故事,详细讲解了Java中线程内部开启异步操作后如何安全地共享数据。介绍了异步操作的基本概念及常见实现方式(如CompletableFuture、ExecutorService),并重点探讨了volatile关键字、CountDownLatch和CompletableFuture等工具在线程间数据共享中的应用,帮助读者理解线程安全和内存可见性问题。通过这些方法,可以有效解决多线程环境下的数据共享挑战,提升编程效率和代码健壮性。
421 6
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
496 17
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
多进程同步之文件锁
【10月更文挑战第16天】文件锁是一种常用的多进程同步机制,它可以用于确保多个进程在访问共享资源时的互斥性。在使用文件锁时,需要注意锁的粒度、释放、竞争和性能等问题。通过合理使用文件锁,可以提高多进程程序的正确性和性能
|
并行计算 安全 Java
Python 多线程并行执行详解
Python 多线程并行执行详解
641 3
|
网络协议 C语言
C语言 网络编程(十三)并发的TCP服务端-以进程完成功能
这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
|
C语言
C语言 网络编程(八)并发的UDP服务端 以进程完成功能
这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。