博文

Thread-如何从整体上理解线程同步方式之一锁(线程并发同步方式之锁概述)

图片
引言 在并发编程中,锁是一种基本的同步机制,用于控制多个线程或进程对共享资源的访问。本文将深入探讨锁的概念、实现方式及其在不同场景下的应用. 概念 锁是一种同步机制,用于在多线程环境中协调对共享资源的访问。它通过限制资源的并发访问,防止数据竞争和不一致性。就是在某些范围内实现同步/有序,这个范围可以是大范围,也可以小范围。实现同步可以阻塞,也可以非阻塞。实现同步在软件方面依赖标志位,或者在硬件方面依赖指令原语

Thread-如何从整体上理解线程同步(线程并发同步概述)

图片
在多线程编程中,线程间的通信是确保程序正确性和性能的关键。线程间通信主要有两种方式:资源共享和消息传递。这两种方式各有优势和适用场景,选择合适的通信方式对于开发高效、可靠的并发程序至关重要。因此线程同步总体可分为资源共享同步和消息传递同步。 资源共享 资源共享是线程间通信的一种方式,其中一个或多个线程可以访问和操作共享变量或数据结构。资源共享模型允许线程直接访问内存中的共享数据,从而实现线程间的隐式通信。 特点 直接访问 :线程可以直接访问共享资源,无需通过其他机制传递数据。 同步需求 :为了确保数据的一致性和 防止竞争条件 ,通常需要同步机制来控制对共享资源的访问。 消息传递 消息传递是线程间通信的另一种方式,线程通过发送和接收消息来交换数据,而不是直接访问共享资源。这种方式可以避免复杂的同步问题,因为每个线程都独立地处理自己的消息。 特点 解耦合 :线程通过消息进行通信,不需要知道其他线程的内部状态。 避免同步问题 :由于不直接访问共享资源,可以减少同步机制的需求。

JVM-如何理解进程内存模型(JVM内存模型-进程)

图片
  在软件开发的世界中,JVM(Java虚拟机)是Java语言的核心组成部分,它为Java程序提供了一个跨平台的运行环境。然而,要深入理解JVM,我们首先需要了解操作系统中的进程模型,毕竟JVM是虚拟机,而操作系统是真实机。JVM是操作系统上的一个特殊的进程,操作系统上有无数个进程。 操作系统中的进程内存模型 进程内存模型是指操作系统如何为运行中的程序分配和管理工作内存的方式。在Linux中,每个进程的虚拟内存空间被划分为多个段,每个段都有特定的用途和权限。

JVM-如何快速掌握JVM类的加载机制(JVM虚拟机类的加载机制)

图片
  在Java的世界中,JVM(Java虚拟机)是实现跨平台运行的关键技术。JVM不仅负责执行Java程序,还管理着程序运行时的内存分配、垃圾回收以及类加载等核心功能。本文将深入探讨JVM中类加载机制的奥秘。 类加载的时机 在Java程序运行期间,类加载器会在需要的时候加载类。这种加载时机通常发生在以下情况: 主动引用 :当程序首次通过名称来引用类的任何字段、方法或者构造器时。 被动引用 :在主动引用的情况下,如果一个类依赖于其他类,那么这些依赖的类也会被加载。比如所依赖的第三方jar包中类。 类加载的过程 类加载过程大致可以分为三个主要阶段:加载(Loading)、链接(Linking)和初始化(Initialization)。

Netty -Event Driven Model(如何理解Netty中的事件驱动模型)

图片
如何理解Netty中的事件驱动模型 在现代软件开发中,事件驱动模型是处理用户交互、异步操作和复杂系统交互的关键技术。本文将深入探讨事件驱动模型的核心组件、事件驱动的步骤、事件与驱动的关系,并以Java语言为例,展示如何在实际编程中应用这一模型。 事件驱动模型的核心组件 事件驱动模型依赖于几个核心组件,它们共同作用以响应和处理事件。以下是这些组件的简要描述: 事件源(Event Source) : 事件源是产生事件的对象 事件对象(Event Object):事件对象是事件本身,封装了事件信息的实体 事件监听器(Event Listener):事件监听器是用于监听特定事件的对象,用作通知分发等等 事件处理器(Event Handler):用于处理事件 事件驱动的步骤 实现事件驱动模型通常遵循以下步骤: 首先,你需要定义一个事件源,事件,监听器,处理器 其次,创建监听器,在监听器中将事件和处理器绑定 具体实现处理器

Java IO -Netty(10分钟帮你快速了解Netty)

图片
  Netty 入门指南 引言 在现代的网络应用开发中,Netty作为一个高性能的网络编程框架,已经成为了Java开发者的首选。本篇文章将简单介绍下Netty的基本使用。 Netty简介 Netty是一个基于Java NIO的异步事件驱动的网络应用框架,它提供了对协议的简单编码和解码,用于快速开发可维护的高性能和高可靠性的网络服务器和客户端程序。 核心组件 Channel :IO 操作的通道,NIO 中Channel 的概念  👉 Java IO-Channels 。 EventLoop :负责处理一个或多个 Channel 的 I/O 事件,每一个EventLoop 由一个线程和Selector 组成。 EventLoopGroup :它是一组 EventLoop 的集合,管理者多个EventLoop ChannelHandler :用于具体操作或拦截Channel中的事件和操作的接口。 ChannelPipeline :一个ChannelHandler的链表,将多了ChannelHandler链接起来,形成 责任链模式 ,每个ChannelHandler依次处理事件。

Design Pattern -High performance Dispatcher Pattern

图片
高性能的Dispatcher模式 在👉  Design Pattern - Dispatcher Pattern 文章中初步搭建了Dispatcher模式框架,本文将进一步聊下如何处理大量并发请求场景,为聊 Java IO-Netty 在做一层铺垫 AI图片 引言 在构建现代软件系统时,尤其是在需要处理大量并发请求的场景下,如何高效地分发和处理事件成为系统设计的关键。本文将探讨一种高性能的Dispatcher模式,通过引入线程池和并发控制,提高系统的响应速度和处理能力。 快速回顾 核心组件 事件(Event) :封装了事件的详细信息。 事件处理器(EventListener) :定义了处理事件的接口。 事件分发器(EventDispatcher) :负责维护事件与处理器的映射关系,并分发事件。

Design Pattern - Dispatcher Pattern

图片
  Dispatcher Pattern 上一篇聊了👉  Design Pattern - Observer Pattern 为了后续继续聊 Java IO-Netty ,再谈下事件分发模式(Dispatcher Pattern) 定义 事件分发模式(Dispatcher Pattern) 模式是一种行为设计模式,用于将客户端的请求委托给多个不同的处理程序中的一个。该模式允许你将请求的处理逻辑与请求的接收逻辑分离,从而提高代码的可维护性和可扩展性。 Dispatcher模式详解 Dispatcher模式通常包含以下几个关键组件: Dispatcher :负责接收请求并将其委托给相应的处理程序。 Event :定义请求的接口,通常包含一个执行方法。 ConcreteEvent :Event接口的具体实现,每个实现对应一个具体的处理程序。 EventListener :执行与请求相关的实际工作。

Design Pattern - Observer Pattern

图片
观察者模式 为了后续继续聊 Java IO-Netty ,先谈下观察者模式(Observer Pattern) 定义与工作原理 定义 :观察者模式是一种对象行为模式,其中一个对象(称为“主题”)维护一组依赖于其的对象(称为“观察者”),并在其状态发生改变时自动通知它们。 工作原理 :主题提供一个注册和注销观察者的机制,当主题的状态发生变化时,它会通知所有注册的观察者。 实现方式 松耦合设计 :确保主题和观察者之间的耦合度低,易于扩展。 动态注册与注销 :允许观察者动态地注册和注销,以适应变化。

Java IO -Channels

  在 👉 Java IO -Streams  文章中写到 Java IO基于两个主要的抽象:   流   (Streams)和   通道   (Channels)。流是数据传输的通道,而通道是流的源头或目的地。 补个坑,接着上篇说完 引言 在现代软件开发中,Java 的 New Input/Output(NIO)已成为处理高并发 IO 操作的标准。Java NIO 提供了一套非阻塞的 IO 操作方式,而 Channels 是这一机制的核心。本文将深入探讨 Java Channels 的概念、使用方式以及与 AIO 的结合应用。 Java NIO 概述 Java NIO 是从 Java 1.4 开始引入的,它在 java.nio 包中提供了一系列用于 IO 操作的新类。NIO 支持面向缓冲区(Buffer)的 IO 操作,可以提供更高的吞吐量和更少的资源消耗。 Channels Channels 的概念 Channels  是 Java NIO 中的一个核心概念,代表 IO 操作的通道。与流(Stream)相比,Channels  提供非阻塞 IO 操作 (👀️  这里并非说Channels是非阻塞的 ),适用于需要高性能和高并发的网络应用。另外流(Stream)是单向的,而Channels是双向的。 主要 Channel 类型 Java NIO 提供了多种 Channels,主要包括: FileChannel :用于文件 IO。 SocketChannel :用于 TCP 网络连接。 ServerSocketChannel :用于监听和接受 TCP 连接。 DatagramChannel :用于 UDP 网络连接。