进程与线程之间的羁绊

        在学习操作系统时,首先大家了解到的知识便是进程与线程,这两者之间有着密不可分的联系,接下来我将介绍什么是进程与线程以及它们之间的区别与联系。

什么是进程与线程

        进程是操作系统中进行资源分配和调度的基本单位,它包含执行中的程序、数据和系统资源(如CPU、内存、文件等)。每个进程都有独立的内存空间和运行状态,可以并发执行,实现多任务处理。对于单核CPU,在同一时刻只能执行一个进程,但操作系统会通过时间片轮转的方式,使得多个进程看起来像在同时进行。对于多核CPU,则它们每个核心都能同时执行一个独立的进程。

       线程是操作系统中进行程序执行的最小单位,它共享进程的资源(如内存、文件句柄等),但拥有独立的执行路径和栈空间。线程比进程更轻量,更适合处理并发任务,因为同一进程内的线程间切换开销较小。

羁绊

 区别:

        资源占用:进程是系统进行资源分配和调度的基本单位,拥有自己的地址空间和系统资源;而线程是进程内的单元,共享进程的资源,不拥有独立的地址空间。

        独立性:进程是独立的,拥有自己的内存空间和资源,相互不干扰;线程则是必须依赖进程存在,不能独立运行,多线程之间的内存是共享一个进程的。

        创建和销毁的开销:进程的创建和销毁涉及资源的分配与回收,开销较大;而线程的创建与销毁开销小,因为线程之间共享进程的资源。

        并发性:进程之间是相互独立的,并发执行会受到资源的限制,而同一进程内的线程可以并发执行,且状态转换速度较快。

联系:

        包含关系:线程是进程的执行单元,一个进程可以包含多个线程,至少包含一个线程。即一个进程需要线程来执行。

        资源共享:同一进程内的线程共享进程的资源,如内存、文件句柄等,这有助于提高程序的运行效率。

        调度关系:进程是资源分配的基本单位,而线程是CPU调度的基本执行单位。线程的调度和切换比进程更频繁,因为线程切换开销较小。

通俗易懂

现在拿我们普通的应用举例,比如当你的电脑在运行微信这个软件的时候,它是占用一个进程还是线程?

        

        我们启动微信的页面,是通过操作系统中的文件系统来开启微信,因此显然它是通过操作系统分配调度的一个进程,因为在微信这个进程中,会包含多个线程来执行不同的任务,比如用户界面线程、网络通信线程、数据处理线程等。这些线程在进程内部并行运行,共同协作完成微信各项功能。根据上面的联系中说,线程共享进程的资源,那么是如何体现线程共享的资源,哪些又是一个线程独有的财产?

        

图片源自:进程和线程的区别和联系

共享

内存共享:微信的所有线程都是在同一个进程内运行的,因此它们共享进程的内存空间。这意味着不同的线程可以访问和修改共享的内存区域,从而实现了数据和资源的共享。例如,聊天界面的线程可以访问和修改用户的聊天记录,而网络通信线程可以读取和发送这些数据。

代码共享:微信的不同线程还可以共享进程的代码段。这意味着每个线程都可以执行相同的代码逻辑,从而减少了内存占用和提高了执行效率。

资源池:微信可能会使用线程池或其他资源池来管理和复用线程资源。这样,当一个线程完成任务后,它可以被放回资源池,供其他任务重用,从而减少了线程的创建和销毁开销。

独立性

执行独立性:虽然所有线程都在同一个进程内运行,但它们各自有自己的执行栈和局部变量空间。这意味着每个线程可以独立地执行自己的任务,而不受其他线程的影响。例如,用户界面线程可以独立地响应用户的输入事件,而网络通信线程可以独立地处理网络数据的收发。

数据独立性:虽然线程共享进程的内存空间,但它们可以通过使用不同的内存区域或数据结构来保持数据的独立性。例如,每个聊天界面线程可以有自己的消息队列和数据缓冲区,从而避免了与其他线程的数据冲突。

调度独立性:操作系统可以独立地调度和管理每个线程的执行。这意味着即使一个线程被阻塞(例如等待用户输入或网络响应),其他线程仍然可以继续执行。这种调度的独立性使得微信能够保持流畅和响应迅速的用户体验。

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值