推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

进程与线程的基本概念

   2023-07-07 网络整理佚名1990
核心提示:进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间互不干扰。总之,进程和线程的提出极大的提高了操作系统的性能。进程让操作系统的并发性成为了可能,而线程让进程的内部并发成为了可能。多进程方式确实可以实现并发,但使用多线程,有以下几个好处:进程是一个独立的运行环境,而线程是在进程中执行的一个任务。当B执行完,根据程序计数器中指向的位置恢复线程A。

您必须在面试中提出有关流程和线程的问题。 我会写几篇文章来扫除文盲。 欢迎大家指出不足之处,好吗?

进程背景

原来的计算机只能接受一些特定的指令,用户每输入一条指令,计算机就会执行一次操作。 当用户思考或打字时,计算机正在等待。 这是非常低效的,很多情况下,计算机处于等待状态。

批处理操作系统

后来出现了批处理操作系统,它写下一系列需要操作的指令,形成一个列表,一次性交给计算机。 用户在磁带上写入多个需要执行的程序,然后发送到计算机中逐个读取并执行这些程序,并将输出结果写入另一盘磁带上。

批处理操作系统在一定程度上提高了计算机的效率,但由于批处理操作系统的指令运行方式仍然是串行的,内存中始终只有一个程序在运行,后续的程序需要等待执行之前的程序要完成。 只能开始执行,前面的程序有时会因为I/O操作、网络等原因而阻塞,所以批处理的效率不高。

流程提案

人们对计算机性能的要求越来越高,现有的批处理操作系统已经不能满足人们的需求。 批处理操作系统的瓶颈在于内存中只有一个程序,那么内存中可以有多个程序吗? ? 这是人们迫切需要解决的问题。

因此,科学家提出了过程的概念。

进程是应用程序在内存中分配的空间,即运行的程序,各个进程之间互不干扰。 同时,进程保存了程序每一时刻运行的状态。

程序:用某种编程语言(java等)编写的、能完成某种任务或功能的代码集合。 它是指令和数据的有序集合,并且是一段静态代码。

此时,CPU以时间片轮换的方式运行进程:CPU为每个进程分配一个时间段,称为其时间片。 如果时间片结束时进程仍在运行,则该进程被挂起,并将CPU分配给另一个进程(这个过程称为上下文切换)。 如果进程在时间片结束之前阻塞或结束,则CPU立即切换,不等待时间片用完。

当进程被挂起时,它会保存当前进程的状态(进程ID、进程使用的资源等),下次切换回来时根据之前保存的状态恢复,然后继续执行。

采用进程+CPU时间片轮换方式的操作系统,宏观上看是在同一时间段内执行多个任务。 换句话说,进程使得操作系统的并发成为可能。 虽然并发从宏观上看是多个任务在执行,但实际上对于单核CPU来说,在任何特定时刻都只有一个任务在占用CPU资源。

操作系统要求进一步提高

虽然进程的出现极大地提高了操作系统的性能,但是随着时间的推移,人们已经不满足于一个进程在一段时间内只能做一件事。 如果一个进程有多个子任务,它们只能一一执行。 这些子任务极大地影响效率。

例如,当杀毒软件对用户的计算机进行检测时,如果在某个检测中卡住,那么后续的检测项目也会受到影响。 也就是说,当你使用杀毒软件中的病毒扫描功能时,只有病毒扫描结束后才能使用杀毒软件中的垃圾清理功能,这显然不能满足人们的要求。

线程演示

那么这些子任务可以同时执行吗? 于是人们又提出了线程的概念,让一个线程执行一个子任务,这样一个进程包含多个线程,每个线程负责一个单独的子任务。

使用线程之后,事情就变得简单多了。 当用户使用病毒扫描功能时,让病毒扫描线程执行。 同时,如果用户再次使用垃圾清理功能,可以先挂起病毒扫描线程,先响应用户的垃圾清理操作,然后执行垃圾清理线程。 响应后切换回来,然后执行病毒扫描线程。

注意:操作系统如何给每个线程分配时间片涉及到线程调度策略。 有兴趣的同学可以阅读《操作系统》,本文不做深入讲解。

总之,进程和线程的引入极大地提高了操作系统的性能。 进程使操作系统的并发成为可能,线程使进程的内部并发成为可能。

多进程也可以实现并发,为什么要用多线程呢?

多进程的方式确实可以实现并发,但是使用多线程有以下优点:

进程和线程的区别

进程是一个独立的运行环境,线程是进程中执行的任务。 两者的本质区别在于是否占用内存地址空间和其他系统资源(如I/O):

还有一个重要的区别是,进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位,即CPU分配时间的单位。

1.2 上下文切换

上下文切换(有时也称为进程切换或任务切换)是指 CPU 从一个进程(或线程)切换到另一个进程(或线程)的情况。 上下文是指某个时间点CPU寄存器和程序计数器的内容。

寄存器是CPU内部的少量快速闪存,通常存储和访问计算过程中的中间值,以提高计算机程序的速度。

程序计数器是一个特殊用途的寄存器,用于指示CPU在指令序列中的位置。 存储的值是正在执行的指令的位置或下一条要执行的指令的位置。 具体的实现取决于具体的系统。

螺纹 A - B 示例

1.先挂起线程A,并将其状态保存在内存中的CPU中。

2. 检索内存中下一个线程B的上下文并将其恢复到CPU的寄存器中,并执行B线程。

3. 当B执行完毕后,根据程序计数器指向的位置恢复线程A。

CPU通过为每个线程分配CPU时间片来实现多线程机制。 CPU通过时间片分配算法循环执行任务。 当前任务执行完一个时间片后,会切换到下一个任务。

但是,在切换之前会保存上一个任务的状态,以便下次切换回该任务时可以再次加载该任务的状态。 所以从保存任务到重新加载任务的过程就是一个上下文切换。

上下文切换通常是计算密集型的,这意味着这个操作会消耗大量的CPU时间,所以线程越多越好。 如何减少系统中上下文切换的次数是提高多线程性能的关键问题。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON