分布式系统详解--基础知识(线程)

简介: 分布式系统详解--基础知识(线程)

分布式系统详解--基础知识(线程)

一、导读

         前面跟大家讲了一下 分布式系统详解--基础知识(概论) ,可以稍微了解一下大体上分布式是怎么一回事了。这片篇文章主要是讲述一下线程的问题分别介绍一下,什么线程,进程和线程之间的关系,最后文章后面介绍一下多线程和分布式之间的关系。

二、来看看图解定义(看图理解定义效果更好~)

程序:就是为了解决某些特定问题或实现特定目标运用计算机语言编写的命令序列集合(都懂吧~~不懂再百度)。

进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程:程序执行流的最小单元。

小明开了一家工厂,工厂中设立了三个车间,有30个员工。为了员工福利,盖了一个餐厅,一个浴室,当然也有个一个厕所。

CPU:计算机的核心就是CPU。就像是一家工厂,加工制造时刻的运作着。

进程:进程呢,就像是工厂当中车间一样,如果给车间供应的电仅仅够一个车间使用,那么当一个车间开工的时候其他车间只能干瞪眼。这就说到了单个CPU一次只能运行一个进程,现在的处理器是多线程处理器,可以同时处理多个进程。

线程:车间里的每一个员工就相当于进程中的一个线程,员工协同完成任务,线程也是协同完成一个进程。

内存:每个车间有固定的大小,员工的人数不易太多。对于线程来说也是这样,线程开启,意味着会占用一定的内存。

互斥锁:现在的公共厕所中只能允许进去一个人,进入之后,其他人就需要在外面等着。相对于内存而言,就是防止多个线程同时使用一块共同的一块内存。

共享内存:开的浴室,大家都可以进(当然男的进男浴室~女的进女浴室~),进程的内存空间是共享的,每个线程共享这些内存。

信号量:但是浴室的人数也是有上线的,当人数达到一定程度就不能再进去了,那怎么办呢?就可以在门外挂上n把钥匙,每进去一个,拿一把钥匙,当员工出来的时候再把钥匙挂在外面的墙上,后来有人来的时候发现门外没有钥匙的时候,就需要等在外面。线程也是如此。这叫信号量。

好了,差不多了吧******

三、让我们来看一看Java中的多线程

示意图:

new(新建状态):实现runnable接口或继承Thread类。new一个实例:

Thread t = new MyThread();

在这儿需要值得注意的一个地方。为什么实现runnable接口和继承Thread类之后重写run方法就行了呢?下面~~

public class java.lang.Thread implements java.lang.Runnable {

Runnable(就绪状态):在这儿t.start();方法就可以进入到就绪状态,该线程也就是做好了准备随时准备被CPU调用,但这个时候还没被执行。

Running(运行状态):当CPU开始调度正在处于就绪状态的线程时,此时线程得以真正进行执行。也就是说,就绪状态是进入到运行状态的唯一入口。

Blocked(阻塞状态):线程运行当中因为某种原因,暂时放弃了CPU 的使用权,线程自动跑到阻塞状态。此时他们需要经过一些等待或者被唤醒才能重新回到就绪状态等待重新运行。而阻塞的状态有三种类型,如图所示:

(1)等待阻塞:运行过程中调用了wait()方法,进入等待阻塞。

(2)同步阻塞:线程在获取synchronized同步锁失败,其他线程正在使用,他就进入了同步阻塞。

(3)其他阻塞:通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

关于Java实现多线程的例子,网上一大堆,就不罗列了。

四、多线程在分布式下的扩展-集群

      这里再重复赘述一下集群的概念,其实就是同一个机组之下多个节点完成同样的事情,这就和多线程说到一块儿了。在这儿要说另外的两个定义,第一个是app集群,第二个是数据库集群。

app集群:一般有一个管理节点,它做的事情很少,但是却非常重要,我们可以从这个管理节点中获取每一个节点的一些应用部署和配置以及状态信息;另外一个是代理节点或者叫分发节点,这个作用是在管理节点之下做分发,这里要保持session一致。集群在这里做到的就是一台机器挂掉了之后,其余的可以顶替。在这里集群组也就相当于一个大的线程组。

数据库集群:这个相对于app集群来说就要难一点了。app集群在垂直扩展上会很方便,但是数据库集群要做的是数据的一致性,实现事务级别的切换和一定的网络计算能力。内存中也比较复杂,因为数据读入到内存中要将多个主机的内存配置得像一个内存一样(通过心跳完成),而且需要得到动态扩展的能力。

引用一位大牛的话,可以自己品一品

       大型系统架构最终数据分布,集中式管理,分布式存储计算,业务级别横向切割,同业务下app垂直分隔,数据级别散列+range+位图分布结构,异地分流容灾,待命机组和资源调配的整合,这一切的基础都来源于多线程的设计思想架构在分布式机组上的实现。

嗯,这是对线程最基本的认识,也是后期学习的必备知识,应当掌握。

目录
相关文章
|
2月前
|
Java 关系型数据库 数据库连接
BATJ高频面试249道题:微服务+多线程+分布式+MyBatis +Spring
本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈,希望大家都能找到适合自己的公司,开开心心的撸代码。
|
8天前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
10 0
|
8天前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
11 0
|
8天前
|
设计模式 安全 NoSQL
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
Java面试题:结合单例模式与Java内存管理,设计一个线程安全的单例类?分析Java多线程工具类ExecutorService与Java并发工具包中的工具类,设计一个Java并发框架的分布式锁实现
15 0
|
2月前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
【5月更文挑战第2天】JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
58 2
|
2月前
|
安全 Java API
Java从入门到精通:3.2.1分布式与并发编程——深入Java并发包,精通多线程高级用法
Java从入门到精通:3.2.1分布式与并发编程——深入Java并发包,精通多线程高级用法
|
2月前
|
存储 缓存 NoSQL
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
Redis 数据结构+线程模型+持久化+内存淘汰+分布式
496 0
|
11月前
|
缓存 安全 算法
多线程、分布式、高并发都不懂?你拿什么跳槽?
多线程、分布式、高并发都不懂?你拿什么跳槽? Synchronized 相关问题 问题一:Synchronized 用过吗,其原理是什么? 问题二:你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁? 问题三:什么是可重入性,为什么说 Synchronized 是可重入锁? 问题四:JVM 对 Java 的原生锁做了哪些优化? 问题五:为什么说 Synchronized 是非公平锁? 问题六:什么是锁消除和锁粗化? 问题七:为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是
|
2月前
|
安全 Java 测试技术
高并发、多线程、分布式都不懂,你拿什么跳槽阿里、腾讯、京东?
Java多线程与高并发实战实践 先来看看高并发多线程一些大厂并发面试题,看你能答出几道!
|
9月前
|
Java 应用服务中间件
98分布式电商项目 - Tomcat性能优化(使用线程池)
98分布式电商项目 - Tomcat性能优化(使用线程池)
40 0