【进程调度的基本过程】初步认识进程和线程的区别与联系:计算机是如何工作的

news2025/1/18 17:15:00

   🔥个人主页: 中草药

🔥专栏:【Java】登神长阶 史诗般的Java成神之路


🐺一.冯·诺依曼体系结构

认识计算机的祖师爷 -- 冯诺依曼
冯·诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇), 美籍匈⽛利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之⼀。冯·诺依曼是布达佩斯⼤学数学博⼠,在现代计算机、博弈论、核武器和⽣化武器等领域内的科学全才之⼀,被后⼈称为“现代计算机之⽗”、“博弈论之⽗”.

        冯·诺依曼体系结构,也称为冯·诺依曼架构,是由著名数学家和计算机科学家约翰·冯·诺依曼在20世纪中期提出的一种计算机设计模型,至今仍然是现代计算机设计的基础。这一架构的核心思想和特点包括以下几个方面:

  1. 程序存储执行:这是冯·诺依曼体系结构最根本的原则之一。它指出,计算机的指令和数据都应以相同的二进制形式存储在单一的存储器中,程序中的指令序列被依次读取并执行。这意味着计算机可以执行任何可以被编码为一系列指令的任务,而不仅仅是硬连线的功能。

  2. 二进制逻辑:在冯·诺依曼体系中,计算机内部使用二进制(0和1)作为数据和指令的表示方式,这是因为二进制简单、易于硬件实现且能有效进行逻辑运算和算术运算。

  3. 五大组成部分*:冯·诺依曼架构的计算机由五个基本部分构成:

    • 中央处理单元(CPU):包括控制器和运算器。控制器负责协调计算机各部件的工作,包括从存储器中取出指令、解码指令并控制指令的执行顺序;运算器负责执行算术和逻辑运算。
    • 存储器(Memory):分为高速缓存、主存储器(RAM)和辅助存储器(如硬盘)。存储器用于保存程序指令和数据。
    • 输入设备:用于将外部世界的信号转换为计算机可以理解的二进制数据,如键盘、鼠标。
    • 输出设备:将计算机处理的结果转换为人类或其他系统可以理解的形式,如显示器、打印机。
    • 辅助存储设备:用于长期存储大量数据,如硬盘驱动器、固态硬盘等。
  4. 指令和数据的同一存储:在冯·诺依曼体系中,指令和数据共享同一内存空间,通过地址来区分。这意味着程序指令和操作数据需要通过内存进行交互,这也导致了所谓的“冯·诺依曼瓶颈”,即CPU与内存之间的数据传输速率限制了系统的整体性能。

  5. 指令的结构

  6. 指令的结构:冯·诺依曼架构中的指令通常由操作码和操作数组成,操作码指示CPU执行何种操作,操作数则提供操作的对象或数据。

        冯·诺依曼体系的局限性在于它强调了顺序执行模式,这在多任务和并行处理方面存在限制。尽管如此,通过改进和扩展(如增加缓存、使用多核CPU、引入虚拟内存等),现代计算机仍然沿用了这一基本架构,同时也在不断探索超越传统冯·诺依曼模型的新计算范式,如量子计算、数据流计算等。

🐒二.CPU核心概念

CPU(中央处理器)是计算机系统的核心组件,负责执行指令、处理数据、控制硬件操作和管理任务调度。以下是几个关于CPU的核心概念以及其两个重要指标——核心数和频率的详细解释:

CPU核心概念

  1. Z令执行:CPU根据存储在内存中的指令序列,执行算术逻辑运算、数据传输、控制转移等操作。

  2. 控制单元(Control Unit, CU):负责指令的解码和执行流程的控制,确保指令按正确的时序执行。

  3. 运算单元(Arithmetic Logic Unit, ALU):执行基本的数学运算和逻辑判断。

  4. 寄存器:CPU内部的高速存储单元,用于暂存数据和指令,提高数据处理速度。

  5. 缓存(Cache):多级缓存设计用于存储最近或频繁访问的数据,减少内存访问延迟。

  6. 总线接口:CPU通过总线与内存和I/O设备通信,包括地址总线、数据总线和控制总线。

核心数(Core Count)

  • 定义:核心数指的是CPU中独立的处理单元数量。每个核心都能独立执行指令流,进行计算操作。
  • 优势:增加核心数可以提升CPU的并行处理能力,即同时处理多个任务或线程的能力,这对于多任务处理、多线程应用和高度并行计算尤为重要。
  • 应用场景:在视频编辑、3D渲染、大数据处理、游戏等需要大量并行计算的场景下,多核心CPU表现更佳。

频率(Clock Speed 或 时钟速度)

  • 定义:CPU的时钟速度通常以GHz(千兆赫兹)为单位,表示CPU每秒钟执行的周期数。每个周期中,CPU可以完成一定的操作。
  • 影响:更高的时钟速度意味着CPU单位时间内可以执行更多的指令,通常与更快的单线程性能相关联。
  • 性能与频率的关系:虽然频率是.衡量CPU速度的一个重要指标,但现代CPU的性能还受制于核心数、架构、缓存大小等因素。在某些多任务或并行处理场景下,核心数的增加可能比单纯提高频率更能提升整体性能。

结合考虑

在选择CPU时,核心数和频率需根据具体应用需求综合考虑。对于高度并行化的应用,多核心更为关键;而对于依赖于单线程性能的任务,较高的时钟速度则更有利。此外,还需考虑CPU的架构(如指令集、微架构设计)、缓存大小等其他因素,这些都会对CPU的整体性能产生影响。

🦁三.指令的执行 *

CPU(中央处理器)执行指令的流程是一个复杂但有序的过程,通常包括以下几个关键步骤:

1. 取指令(Instruction Fetch, IF)

  • 程序计数器(PC):CPU有一个称为程序计数器的特殊寄存器,它存储着当前正在执行指令的地址或下一条待取指令的地址。
  • 内存读取:CPU根据程序计数器的值从内存中读取指令。这个地址被送入内存地址寄存器(MAR),并通过地址总线传送到内存。内存通过数据总线将指令送回CPU,通常存储在指令寄存器(IR)中。
  • PC更新:一旦指令被取出,程序计数器通常会自动递增,指向下一个指令的地址,除非指令本身包含跳转或分支信息。

2. 指令译码(Instruction Decode, ID)

  • 指令解析:CPU对指令寄存器中的指令进行解码,识别出指令的操作码(OpCode)和操作数(Operand)。
  • 操作数寻址:如果指令需要操作数,CPU可能需要进一步的寻址操作来确定操作数的位置。这可能涉及到直接从指令中获取立即数,从寄存器中读取,或从内存中通过直接、间接、相对或基址变址寻址等方式取得。

3. 执行指令(Execute, EX)

  • 运算:根据指令的类型,CPU的算术逻辑单元(ALU)执行相应的操作,如加减乘除、逻辑运算等。
  • 控制操作:如果指令涉及控制转移(如条件分支、循环、子程序调用等),控制单元会根据指令的执行结果改变程序计数器的值,决定下一步执行哪条指令。

4. 访存(Memory Access, MEM)

  • 读写操作:如果指令需要读取或写入数据到内存,CPU会在本阶段通过总线完成数据的传输。这可能发生在取操作数阶段,也可能是在执行结果写回之前。
  • 数据准备:对于需要内存操作数的指令,可能需要额外的周期来完成数据的加载或存储。

5. 写回(Write Back, WB)

  • 结果处理:指令执行产生的结果被写回到寄存器或内存中。如果是计算结果,通常会写入到指定的寄存器;如果是数据操作,可能直接写回内存。
  • 状态更新:CPU可能还会更新状态寄存器,反映执行结果,如设置标志位来表示零结果、负数、溢出等情况。

循环

  • 下一条指令:完成上述步骤后,CPU重复这一流程,开始取下一条指令的执行,直到遇到停止指令或系统中断。

        这个过程是CPU执行指令的基本框架,被称为“指令周期”。现代CPU为了提高效率,常常采用流水线技术、预测执行、乱序执行等高级特性,使得多个指令的不同阶段可以同时进行,大大提高了处理速度。

🦌四.进程

进程是操作系统中的一个核心概念,用于描述正在运行的程序及其相关的状态。它是一个动态实体,具有生命周期,从创建、运行到终止。理解进程,我们可以从以下几个方面来详细探讨:

1. 基本概念

  • 定义:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位。它包括了程序代码、当前活动、相关的数据结构(如栈、堆)以及进程控制块(PCB)。

2. 状态

进程在其生命周期中会经历多种状态,常见的包括:

  • 就绪态(Ready):进程已准备好运行,等待CPU分配。
  • 运行态(Running):进程正占用CPU并执行。
  • 阻塞态(Blocked)/等待态(Waiting):进程因等待某个事件(如I/O完成、信号接收,等待键盘输入)而暂停执行。

3. 创建与终止

  • 创建:通常由现有进程通过系统调用(如forkCreateProcess)创建新进程。新进程会继承父进程的部分属性,并根据需要分配资源。
  • 终止:进程可以正常结束(如执行完毕),也可以因错误(如段错误、除以零)被异常终止。终止时,系统会回收其资源,更新相关状态。

4. 进程通信

为了实现进程间的数据交换或同步,操作系统提供了多种机制:

  • 共享内存:直接在内存中划分一块区域供多个进程访问。
  • 管道(Pipe):单向或双向的数据流,常用于父子进程间的通信。
  • 消息队列:允许进程发送和接收带有优先级的消息。
  • 信号量:用于解决资源访问的同步问题,实现进程间的互斥与同步。
  • 套接字(Socket):网络通信中使用,也支持同一主机上的进程间通信。

5. 进程调度*

进程控制块(PCB)

PCB是操作系统为每个进程维护的一个数据结构,用以保存该进程的全部信息和运行状态。它是进程存在的唯一标识,也是操作系统能够管理和调度进程的基础。PCB通常包含但不限于以下信息:

  1. 进程标识符(PID):唯一地标识一个进程。
  2. 处理器状态信息:如程序计数器(PC),用于存放当前要执行的下一条指令的地址;寄存器内容等,当进程被中断时,这些信息会被保存到PCB中,以便进程恢复执行时能正确继续。
  3. 进程调度信息:如优先级、时间片剩余量等。
  4. 内存管理信息:如基址、界限寄存器值、页表指针等,用于虚拟地址到物理地址的转换。
  5. I/O状态信息:包括I/O请求队列、设备分配情况等。
  6. 记账信息:如CPU使用时间、时间限制、账户信息等。

链表在进程管理中的应用

操作系统使用链表结构来组织和管理所有进程的PCB,主要有以下几种形式:

  1. 就绪队列:存储所有处于就绪状态的进程的PCB。通过这个链表,操作系统可以方便地选择下一个要运行的进程。

  2. 等待队列:每个等待事件(如I/O完成、信号接收)都对应一个等待队列,包含所有因等待该事件而阻塞的进程的PCB。当事件发生时,操作系统遍历相应队列,唤醒等待的进程。

  3. 活动进程链表:有时操作系统还会维护一个链表,包含系统中所有活动进程的PCB,无论是运行中、就绪还是等待状态的进程,便于全局管理和监控。

        通过这些链表结构,操作系统可以高效地进行进程的调度、状态转换以及资源分配等工作。例如,在时间片用尽或更高优先级进程到达时,操作系统可以从就绪队列中摘取下一个进程的PCB,将其状态设置为运行态,并将当前运行进程的PCB放回就绪队列或根据需要调整到等待队列。

        总之,PCB和链表是实现进程管理和调度机制的基石,确保了操作系统的稳定运行和资源的有效利用。

🐮五.线程

1. 定义与特点

  • 定义:线程是进程中执行运算的最小单位,是处理器调度的基本单位。它可以并发执行多个任务,而无需创建多个进程。
  • 轻量级:相比于进程,创建和切换线程的开销较小,因为线程共享其所在进程的资源和上下文环境。
  • 并发与并行:线程使得程序能够在单个或多个处理器上同时执行多个任务,实现并发性。在多核处理器上,线程可以真正并行运行

2. 线程的创建

在Java中,创建线程有两种主要方式:

继承Thread类

这是最直接的一种方式,用户自定义类继承java.lang.Thread类,然后覆盖run()方法。在run()方法中编写需要并发执行的代码。示例如下:

class MyThread extends Thread {
    public void run() {
        // 线程执行的代码
        System.out.println("通过继承Thread类创建线程");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // 启动线程
    }
}

实现Runnable接口

这种方式更灵活,因为Java不支持多重继承,如果自定义类已经继承了其他类,那么只能通过实现java.lang.Runnable接口来创建线程。实现Runnable接口需要实现run()方法,然后将该Runnable实例作为参数传递给Thread构造器来创建Thread对象。示例如下:

class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的代码
        System.out.println("通过实现Runnable接口创建线程");
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();
        Thread t = new Thread(r);
        t.start(); // 启动线程
    }
}

3. 状态

线程同样有多种运行状态,常见的包括:

  • 新建(New):线程刚被创建,尚未开始执行。
  • 就绪(Runnable):线程准备就绪,等待CPU分配。
  • 运行(Running):线程正在CPU上执行。
  • 阻塞(Blocked):线程因等待某种事件(如I/O、锁)而暂停执行。
  • 死亡(Terminated):线程执行完毕或被强制终止。

4. 同步与通信

  • 同步:由于线程共享资源,可能会引发数据竞争和一致性问题。为了解决这些问题,需要使用同步机制,如互斥锁(Mutex)、信号量、条件变量、读写锁等。
  • 通信:虽然线程共享内存空间,可以直接访问同一进程内的数据,但为了安全和有序访问,仍需采用适当的通信机制。在某些情况下,线程之间也会使用消息传递(如通过队列)进行通信。

5. 多线程的优势与挑战

  • 优势:提高应用程序的响应速度和吞吐量,充分利用多核处理器资源,简化并发编程模型。
  • 挑战:线程之间的资源共享可能导致数据不一致和竞态条件,增加编程复杂度;过多线程可能导致上下文切换频繁,降低效率;死锁、活锁和饥饿等问题也需要特别注意。

综上所述,线程作为现代软件开发中的重要概念,极大地促进了程序的并发执行和资源利用,但同时也带来了复杂的同步与管理问题,需要开发者仔细设计和实现。

🐏六.进程和线程的区别与联系

进程与线程是现代操作系统中实现并发执行的两个核心概念,它们紧密相连又各有侧重,共同支撑着复杂应用程序的高效运行。

1.关系概述

  • 进程与线程的层级关系:进程构成了资源分配的逻辑容器,是操作系统中程序执行的独立实体,可以视为一个或多个线程的集合体。每个进程至少包含一个线程,即主线程,负责执行程序的初始入口点。在此基础上,进程可进一步细分为多个线程,以实现更细腻的并发执行和资源共享。

2.系统管理与资源调度视角

  • 资源分配与管理:进程作为系统资源分配的最小单位,拥有独立的内存地址空间、文件描述符集、安全上下文等资源。操作系统通过进程隔离机制确保各进程间的安全性和稳定性。
  • CPU调度:线程作为CPU调度的最小单位,代表了处理器上的执行流。相比进程,线程的创建、切换成本更低,更加灵活高效,使得程序能更精细地利用多核处理器资源,实现并行计算和任务并发。

3.资源使用维度

  • 资源共享与隔离:不同进程之间保持严格的资源隔离,无法直接访问对方的内存或其他资源。而在同一进程内部,线程共享进程的全部资源,包括内存空间、打开的文件等,这既简化了线程间通信,也引入了同步问题,需要通过锁、信号量等机制来协调访问,保证数据一致性。

🦣七.总结与反思

性痴,则其志凝:故书痴者文必工,艺痴者技必良。——世之落拓而无成者,皆自谓不痴者也。        ——蒲松龄《阿宝》

        在计算机科学的广阔天地中,冯·诺依曼体系结构、CPU、进程、线程是构建现代计算机系统和软件运行基础的核心概念。通过初步探索,我们不仅能够揭开计算机内部运作的神秘面纱,还能对软件开发中的并发编程有更深层次的理解。

冯·诺依曼体系结构

冯·诺依曼体系结构是现代计算机设计的基石,由数学家约翰·冯·诺依曼提出。该体系结构的核心特征包括:

  • 存储程序:程序和数据一起存储在内存中,计算机按照存储的指令顺序执行。
  • 二进制表示:信息在计算机内部以二进制形式表示,无论是数据还是指令。
  • 五大组成部分:包括输入设备、输出设备、存储器、控制器和运算器(CPU的一部分),形成了一个闭环的信息处理流程。

CPU(中央处理器)

CPU是计算机的“大脑”,负责执行指令、控制和协调各种操作。其主要功能部件包括:

  • 运算器:执行算术和逻辑运算。
  • 控制器:负责取指令、解码指令、控制指令执行顺序,并管理与其他硬件组件的交互。
  • 高速缓存:为了加速数据访问,现代CPU集成有多级高速缓存,存储近期频繁使用的数据和指令。

进程

进程是操作系统中程序执行的实例,拥有独立的内存空间和系统资源。每个进程都有一份程序代码、数据和堆栈,以及一个进程控制块(PCB),用于记录进程状态和管理信息。进程之间通过操作系统提供的机制(如IPC)进行通信和同步,实现资源共享和任务协作。

线程

线程是进程内的执行单元,是CPU调度的基本单位,共享所属进程的内存空间和资源。与进程相比,线程的创建、切换成本更低,更适用于并发执行。线程间通过共享内存直接通信,但也因此需要解决数据同步问题,防止竞态条件。实现线程的机制包括继承Thread类、实现Runnable接口(Java中)等。

反思

        通过初步学习,我们不难发现,冯·诺依曼体系结构为计算机硬件的组织提供了基本框架,而CPU作为核心组件,其强大的计算能力是这一切运行的基础。进程与线程的引入,则让软件层面的并发执行成为可能,极大地提升了计算机系统的效率和响应速度。然而,随着技术的发展,新的挑战也随之而来,比如如何在多核处理器环境下更高效地利用并行计算资源,如何在分布式系统中实现更高效的进程间通信和数据一致性,以及如何更好地管理和优化线程间的并发控制,减少死锁和竞态条件等问题。

        未来的计算机体系结构和软件设计,将不断向着更高的并行性、更低的延迟和更强的资源利用率发展,而对这些基础知识的深入理解和持续探索,将成为我们应对未来挑战的坚实基础。


🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐

  制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1802006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:动态库和静态库的编译与使用

目录 1.前言 2.静态链接库 3.静态链接库生成步骤 4.静态链接库的使用 5.动态链接库 6.动态链接库生成步骤 7.动态链接库的使用 8.动态链接库无法加载 9.解决动态链接库无法加载问题 前言 在《MinGW:从入门到链接库》博客中简单介绍了如何编译动态链接库和静态链接库…

快速安装Windows和Ubuntu双系统

一、参考资料 用UltraISO制作Ubuntu16.04 U盘启动盘 DiskPart Command-Line Options 二、相关介绍 1. MBR和GPT分区模式 MBR分区模式 MBR最大仅支持2TB磁盘,超过2TB不可识别。 MBR(Master Boot Record),即硬盘的主引导记录分…

统计信号处理基础 习题解答10-8

题目 一个随机变量具有PDF 。希望在没有任何可用数据的情况下估计的一个现实。为此提出了使最小的MMSE估计量,其中期望仅是对求的。证明MMSE估计量为。将你的结果应用到例10.1,当把数据考虑进去时,证明最小贝叶斯MSE是减少的。 解答 在贝叶…

python -- series和 DataFrame增删改数据

学习目标 知道df添加新列的操作 知道insert函数插入列数据 知道drop函数删除df的行或列数据 知道drop_duplicates函数对df或series进行数据去重 知道unique函数对series进行数据去重 知道apply函数的使用方法 1 DataFrame添加列 注意:本文用到的数据集在文章顶部 1.1 直…

Servlet基础(续集)

Servlet原理 Servlet是由Web服务器调用&#xff0c;Web服务器在收到浏览器请求之后&#xff0c;会&#xff1a; Mapping问题 一个Servlet可以指定一个映射路径 <servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pa…

物联网8大协议介绍及对比

一.物联网主流协议介绍 1.MQTT 协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;即消息队列遥测传输。 MQTT 协议最初是在 1999 年由 IBM 公司开发的&#xff0c;用于将石油管道上的传感器与卫星相连接。2014 年正式成为 OASIS 开放标准。 MQTT 使用…

Element UI上传图片和PDF,支持预览,并支持复制黏贴上传

背景 如上图&#xff0c;使用Element UI的el-upload组件&#xff0c;并且预览的时候可以展示图片和PDF格式文件&#xff1b; 做法 index.vue <template><div><el-uploadv-model"diaForm.list":limit"5":on-exceed"handleExceed"…

使用AutoGen框架进行多智能体协作:AI Agentic Design Patterns with AutoGen

AI Agentic Design Patterns with AutoGen 本文是学习https://www.deeplearning.ai/short-courses/ai-agentic-design-patterns-with-autogen/ 这门课的学习笔记。 What you’ll learn in this course In AI Agentic Design Patterns with AutoGen you’ll learn how to buil…

vue+vscode 快速搭建运行调试环境与发布

1.安装node.js Node.js — Run JavaScript Everywhere 默认不断next 2.更换镜像地址 运行-cmd 执行以下代码安装 npm config set registry https://registry.npmmirror.com 检查node.js和镜像是否是否成功 node -v npm -v npm config get registry 3.安装打包工具 …

【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;死信队列 RabbitMQ的工作模式 死信队列的工作模式 二、&#x1f349;RabbitMQ相关的安装 三、&#x1f34e;SpringBoot引入RabbitMQ 1.引入依赖 2.创建队列和交换器 2.1 变量声明 2.2 创建…

Java采取擦除式泛型到底兼容了什么场景?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;Java擦除式泛型是一个妥协,…

高光谱图像聚类的像素-超像素对比学习与伪标签校正

Pixel-Superpixel Contrastive Learning and Pseudo-Label Correction for Hyperspectral Image Clustering 文章目录 Pixel-Superpixel Contrastive Learning and Pseudo-Label Correction for Hyperspectral Image Clustering摘要引言相关方法对比学习 方法超像素对比学习像素…

【Flask开发实战】首页模板

一、前言 前面我们已经完成登录页面的设定&#xff0c;登录后临时调转到“hello flask”的界面。现在我们根据实际首页的设计需要&#xff0c;来完成首页相关内容的开发。一般系统首页会放一些分析数据&#xff0c;多以图表的方式展示&#xff0c;方便使用者了解信息。以防火墙…

JavaScript事件监听之其它事件(页面加载事件、元素滚动事件、页面尺寸事件、M端事件)

目录 1. 页面加载事件(load、DOMContentLoaded)2. 元素滚动事件(scroll)3. 页面尺寸事件3.1 resize3.2 获取元素宽高3.3 获取元素位置(offsetLeft和offsetTop、getBoundingClientRect) 4. M端事件 1. 页面加载事件(load、DOMContentLoaded) load事件&#xff1a; 使用场景: 等…

MyBatis二级缓存开启条件

MyBatis缓存为俩层体系。分为一级缓存和二级缓存。 一级缓存&#xff1a; 一级缓存默认开启&#xff0c;一级缓存的作用域是SqlSession级别的&#xff0c;这意味着当你更换SqlSession之后就不能再利用原来的SqlSession的一级缓存了。不同的SqlSession之间的一级缓存是隔离的。…

基础概念解析:SOCKS5代理究竟是什么?SOCKS5代理ip使用场景有哪些?

在当今数字化时代&#xff0c;网络安全和隐私保护已成为我们日常生活中不可忽视的问题。随着网络攻击手段的日益复杂&#xff0c;如何安全地访问互联网资源成为了一个亟待解决的问题。SOCKS5代理作为一种先进的网络协议&#xff0c;为我们提供了解决这一问题的有效方案。 本文…

实用的 C 盘搬家软件

一、简介 1、一款专门用于 Windows 系统的文件夹移动工具&#xff0c;它允许用户将程序或游戏的安装文件夹从一台驱动器移动到另一台驱动器&#xff0c;或者同一个驱动器内的不同路径&#xff0c;而无需重新安装或破坏现有的程序安装。 二、下载 1、下载地址&#xff1a; 官网链…

3-1RT-Thread时钟管理

这里写自定义目录标题 时钟节拍是RT thread操作系统的最小时间单位。 第一个功能&#xff0c;rt tick值自动加1&#xff0c;在RT thread当中通过RT_USING_SMP定义了多核和单核的场景。第二个功能&#xff0c;检查当前线程的时间片&#xff0c;首先获取当前线程&#xff0c;将当…

AI 写高考作文丨10 款大模型 “交卷”,实力水平如何?

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的未来科技&#xff0c;而是逐渐融入我们日常生活的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到精准医疗诊断&#xff0c;AI技术正以其强大的计算能力和数…

端午搞个零花钱,轻松赚取创业的第一桶金!2024最受欢迎的创业项目,2024新的创业机会

好好的端午节&#xff0c; 净给我添堵&#xff01; 本来我打算在端午节愉快的玩耍&#xff0c; 结果一大早起床却看到舍友在给一堆设备充电&#xff0c; 然后装的整整齐齐&#xff0c; 满满一书包。 我好奇他小子这是要干嘛&#xff1f; 不会是打算今天回去给亲朋好友准备…