什么是分布式系统?Redis分布式锁是什么?

在这里插入图片描述
当您第一次进入工作场所时,无论您是在使用C+、Java,还是仅仅在申请操作和维护职位,我相信您都会遇到这个问题。
这是一个非常基本的问题,也是对人们水平的很大考验。
这是因为每个学习计算机的人都应该明白,进程线程是计算机的基本概念,是每个程序员一直在接触的东西。
但这是另一个充满陷阱的问题,可以无限扩大和加深。例如,它可以从操作系统知识扩展到计算机组成原理,从单线程扩展到并发编程,从并发编程扩展到线程同步、线程安全、进程间通信等。
那么我们该如何回答这个问题呢?
因为您想要讨论不同之处,所以首先需要了解什么是进程和线程。
以前,我读了一篇材料,发现有一个很好的类比,可以很清楚地解释它们。
1.计算机的核心是CPU,它承担了所有的计算任务。就像个工厂,一直在运转。
2。假设工厂的电力有限,一次只能供应给一个车间。也就是说,一个车间开工的时候,其他车间都必须停工。这意味着单个CPU一次只能运行一个任务。
3。这个过程就像一个工厂车间,它表示CPU可以处理的单个任务。在任何给定的时间,CPU总是运行一个进程,而其他进程没有运行。
4。一个车间里可以有许多工人。他们共同努力完成一项任务。
5。线程就像车间里的工人。一个进程可以包含多个线程。
6。车间的空间由工人们共享,例如,每个工人都可以进入许多房间。这表示进程的内存空间是共享的,可以由每个线程使用。
7。但是,每个房间的大小是不同的,有些房间只能容纳一个人,如厕所。当有人在里面的时候,没有其他人可以进去。这意味着当一个线程使用一些共享内存时,其他线程必须等待它结束,才能使用这段内存。
8。防止别人进来的一个简单方法就是在门上一把锁。先到的人锁门,到的人看到锁。他们在门口排队,等锁打开后再进入。这被称为“互斥”(互斥,缩写互斥),以防止多个线程同时读取和写入内存区域。
9。也有可以同时容纳n个人的房间,比如厨房。换句话说,如果数字大于n,那么只能在外面等待的人就越多。这类似于某些只能由固定数量的线程使用的内存区域。
10。在这一点上的解决办法是在门口挂一把钥匙。进去的人拿着钥匙,出来的时候把钥匙挂回去。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种方法被称为“信号量”(Semaphore),以确保多个线程之间不会发生冲突。
不难看出互斥是信号量的特例。也就是说,后者完全可以取代前者。但是,因为互斥是简单和有效的,所以在有必要确保资源是排他的时候,仍然使用这种设计。
11。操作系统的设计,所以可以归结为为三点:
(1)多进程形式,允许多个任务同时运行;
(2)以多线程的形式,将单个任务划分为不同的部分;
(3)提供协调机制,一方面防止进程和线程之间的冲突,另一方面允许进程和线程之间共享资源。
这个类比可以生动地说明进程和线程之间的区别。
当然,你不能在采访中这么说。面试官预计会和你在一起很匆忙。一刻千金。我们需要用最简洁的语言来说明两者之间的概念和区别。
你可以这样回答(面试需要有逻辑的、简洁的、切中要害的):
(1)进程
过程是程序的执行过程,是一个动态的概念,是在程序执行过程中分配和管理资源的基本单元。每个进程都有自己的地址空间,并且至少有五种基本状态。它们是:初始状态、执行状态、等待状态、就绪状态、终止状态。
(2)线程
线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
(3)联系
线程是进程的一部分。线程只能属于一个进程,进程可以有多个线程,但至少有一个线程。
(4)区别:理解它们的差别,我从资源使用的角度出发。(所谓的资源就是计算机里的中央处理器,内存,文件,网络等等)
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
环境:您可以在操作系统中同时运行多个进程(程序);多个线程在同一进程中同时执行(使用cpu调度,每个时间片只有一个线程)。
内存分配:系统在运行时为每个进程分配不同的内存空间;对于线程(CPU除外),系统不将内存分配给线程(线程使用的资源来自它们所属进程的资源),并且只能在线程组之间共享资源。
包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
1。为什么我需要设计线程?
在传统的过程模型中,流程的内涵可以分为以下两个方面:
调度和执行的基本单元:每个进程都有自己的运行状态、优先级、寄存器等。它是操作系统调度的基本单元。
资源所有权:包括程序、数据、文件和其他资源。进程拥有这些资源的所有权,而OS则提供保护,防止不同进程之间的资源冲突。
因为它们是两个分开的函数,它们可以分开吗?这就产生了线程(线程)的概念:
执行与调度的基本单位:thread
资源所有权:process
所以执行和调度的基本单元是线程,这种设置有什么好处?
在计算机操作系统中有两个重要的概念:并发和隔离。
并发是为了尽量让硬件利用率高,线程是为了在系统层面做到并发。线程上下文切换效率远高于进程上下文切换,从而提高了并发效率。
隔离也是并发之后要解决的重要问题,计算机的资源一般是共享的,隔离要能保障崩溃了这些资源能够被回收,不影响其他代码的使用。因此,可以说操作系统只有线程而没有进程,但是这样的系统经常会崩溃,而且最初开发时的操作系统与之非常相似。
因此:线程与并发性相关,进程与隔离相关。线程基本上是为了并发执行代码而引入的,因为要分配CPU时间片,暂停和恢复应该能够继续执行,就像它们没有暂停一样。一个进程相当于一堆线程加上在线程执行过程中请求的资源,这些资源一旦挂起,就应该是可回收的,而不会影响其他程序。
欢迎进群547474567学习交流,群里提供全套的编程教程哦

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值