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

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

一、导读

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

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

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

进程:进程(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+位图分布结构,异地分流容灾,待命机组和资源调配的整合,这一切的基础都来源于多线程的设计思想架构在分布式机组上的实现。

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

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料

                                    

文章回顾链接:

 1,分布式系统详解--基础知识(概论

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

 3,分布式系统详解--基础知识(通信)

 4,分布式系统详解--基础知识(CAP)

 5,分布式系统详解--基础知识(安全)

 6,分布式系统详解--基础知识(并发)

 7,分布式系统详解--架构简介(微服务)

 8,分布式系统详解--Linux(权限)

 9,分布式系统详解--框架(Hadoop-单机版搭建)

10,分布式系统详解--架构(Hadoop-克隆服务器)

11,分布式系统详解--框架(Hadoop-集群搭建)

12,分布式系统详解--框架(Hadoop-Ssh免密登陆配置)

猜你喜欢

转载自blog.csdn.net/mcb520wf/article/details/82491769
今日推荐