![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程与网络通信
文章平均质量分 86
外星喵
喵了个咪的~~
展开
-
多线程事务如何保证效率和原子性
这里细心些就会发现,即便是主线程通知子线程可以提交了,子线程依然有可能出现提交失败的可能,那其他线程提交事务是无法得知这边的失败的消息的。需要注意如果只是传递普通的 boolean 对象,可能会发生不一致的情况,我测试时没法通过。在 Spring 开发时,遇到一个从 Excel 表导入数据到数据库的需求,当然最简单的方法就是先使用 EasyExcel 把数据读出到集合中,然后依次插入到数据库中。每个线程开启事务,插入数据,但不提交,向主线程通知说,我这里已经好了。Volatile保证线程间数据的可见性。原创 2023-02-07 19:47:22 · 1114 阅读 · 0 评论 -
API管理神器:Apifox
其实大家都知道 API 文档先行的重要性,但是在实践过程中往往会遇到很多困难。程序员最讨厌的两件事:1. 写文档,2. 别人不写文档。大多数开发人员不愿意写 API 文档的原因是写文档短期收益远低于付出的成本,然而并不是所有人都能够坚持做有长期收益的事情的。作为一个前后端分离模式开发的团队,我们经常会看到这样的场景:前端开发和后端开发在一起热烈的讨论“你这接口参数怎么又变了?”,“接口怎么又不通了?”,“稍等,我调试下”,“你再试试…"。那能不能写好 API 文档,大家都按文档来开发?原创 2023-01-01 00:02:54 · 6476 阅读 · 0 评论 -
Fork/Join 框架基本使用和原理
ForkJoin 框架其实就是一个线程池 ExecutorService 的实现,通过工作窃取算法,获取其他线程中未完成的任务来执行。充分利用机器的多处理器优势,利用空闲的线程去并行快速完成一个可拆分为小任务的大任务,类似于分治算法。ForkJoin 的目标,就是利用所有可用的处理能力来提高程序的响应和性能。...原创 2022-06-26 20:58:04 · 326 阅读 · 0 评论 -
解决Elasticsearch集群 master_not_discovered_exception 异常
解决elasticsearch集群启动完成后报master_not_discovered_exception异常原创 2022-06-23 11:51:02 · 15336 阅读 · 0 评论 -
分布式系统限流、降级、熔断框架Hystrix
为什么需要容错限流复杂分布式系统通常有很多依赖,如果一个应用不能对来自依赖 故障进行隔离,那么应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,将会在数秒内导致 所有应用资源被耗尽(一个臭鸡蛋影响一篮筐)。如秒杀、抢购、双十一等场景,在某一时间点会有爆发式的网络流量涌入,如果没有好的网络流量限制,任由流量压到后台服务实例,很有可能造成资源耗尽,服务无法响应,甚至严重的导致应用崩溃。Hystrix是什么Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所原创 2021-08-15 23:40:41 · 550 阅读 · 0 评论 -
基于Zookeeper与Netty实现的分布式RPC服务
文章目录前言架构前置知识服务接口API用户服务接口用户对象RPC请求对象RPC响应对象服务提供者RPC服务端RPC业务处理暴露接口服务注册服务消费者RPC客户端RPC客户端处理类RPC客户端代理类服务发现web接口前言大部分的互联网公司在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变,但具体实现微服务架构的方式有所不同,主流上分为两种,一种是基于Http协议的远程调用,另外一种是基于RPC方式的调用。两种方式都有自己的代表框架,前原创 2021-08-01 23:53:50 · 1343 阅读 · 17 评论 -
Zookeeper实现分布式锁
Zookeeper分布式锁原理临时顺序节点该类型的节点创建完成之后,若客户端与服务端断开连接之前没有执行delete操作,Zookeeper会自动删除该类型的节点,同时该类型的节点创建之后,Zookeeper会为该类型的节点在节点名称的基础上增加一个单调递增的编号;Zookeeper 分布式锁应用了其 临时顺序节点 的特性。实现步骤如下:获取锁首先在Zookeeper中创建一个持久节点ParentLock,当第一个客户端要获取锁时,在ParentLock节点下创建一个临时顺序节点Lock1原创 2021-07-25 23:58:36 · 276 阅读 · 22 评论 -
Zookeeper原理与集群
前言Zookeeeper介绍从服务角度来看:Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题从数据结构角度来看:ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理从设计模式角度来看:Zookeeper是一个分布式服务管理框架,它讲注册的服务作为数据进行存储,一旦某些数据的原创 2021-07-17 23:59:50 · 511 阅读 · 26 评论 -
常用的限流算法
在衡量Web系统性能的指标中,最重要的参数是QPS,它表示系统每秒最多能够处理的请求数量,当存在需要处理的流量(Query数)使得系统即使以极限QPS处理也无法在短时间内处理完所有流量,则称这个段时间内系统处于承压状态。原创 2021-06-10 19:47:09 · 886 阅读 · 8 评论 -
IM通讯系统分析与实战
### 什么是IM(即时通讯)?即时通信(instant message,IM)是指能够即时发送和接收互联网消息等的业务,通常集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通信已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。微软、腾讯、AOL、Yahoo等重要即时通信提供商都提供通过手机接入互联网即时通信的业务,国内最常用的即时通讯软件如QQ、微信、百度hi、网易泡泡、淘宝旺旺等等。用户可以通过手机与其他已经安装了相应客户端软件的手机或电脑收原创 2021-04-21 15:44:10 · 3327 阅读 · 2 评论 -
RPC框架原理与实现
RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。简单地说就是能使应用像调用本地方法一样的调用远程的过程或服务,可以应用在分布式服务、分布式计算、远程服务调用等许多场景。原创 2021-04-26 16:34:40 · 2995 阅读 · 2 评论 -
秒杀系统分析与实现
所谓“秒杀”,通常是由于卖家发布一些标的价格远低于实际价格的稀缺或者特价商品,吸引大量买家在同一时间网上抢购的一种销售方式。由于所有参与“秒杀”的商品通常是以不可思议的低价呈现,因此全国各地大量的顾客一到“秒杀”时段就会守在电脑前不断点击和刷新,进行抢拍,导致大量请求发送到电商服务器。超过秒杀限制的时间或者库存不足后,参与“秒杀”的商品就会拍完下架。秒杀场景一般会在电商网站举行一些促销活动(如小米手机抢购)或者节假日在12306网站上抢票时遇到。原创 2019-04-25 15:05:54 · 20720 阅读 · 2 评论 -
多路复用器select&poll&epoll
首先要检查你的perl是否安装,因为codestriker用的是perl驱动和mysql相连,不过一般的linux系统都已经为你安装好了,输入命令:#rpm –qa | grep perl说明已经有了perl,不需要再去安装了。如果没有的话就:yum install perlmysql安装与配置我用的mysql为MySQL-server-5.5.8-1.rhel5.i386,MySQL...原创 2019-01-24 16:49:18 · 1007 阅读 · 1 评论 -
分布式消息队列kafka
文章目录前言什么是Kafka?Kafka的特性Kafka的意义Kafka工作原理kafka架构介绍ProducerBrokerConsumerPatitionZookeeperkafka工作流程发布-订阅消息的工作流程队列消息/用户组的工作流kafka的使用与实践Kafka 安装使用springboot集成1.导入pom依赖2.创建生产者3.创建消费者4.application.yml 详细配置前言什么是Kafka?Kafka 是 由Apache 软件基金会开发一个开源 高吞吐量 的 分布式 发布-订原创 2021-07-12 00:18:42 · 995 阅读 · 37 评论 -
延迟队列DelayQueue原理
前言什么是DelayQueue(延时队列)DelayQueue 是一个通过PriorityBlockingQueue实现延迟获取元素的无界队列无界阻塞队列,其中添加进该队列的元素必须实现Delayed接口(指定延迟时间),而且只有在延迟期满后才能从中提取元素。什么是PriorityBlockingQueue(优先队列)PriorityBlockingQueue是一个支持优先级的无界阻塞队列,队列的元素默认情况下元素采用自然顺序升序排列,或者根据构造队列时提供的 Comparator 进行排序,具体取原创 2021-07-10 15:56:57 · 14407 阅读 · 14 评论 -
Redis实现分布式锁
分布式锁什么是分布式锁?在传统单体应用单机部署的情况下,可以使用本地锁如ReentrantLcok 或 synchronized进行互斥控制来解决。但是,随着业务的发展,系统架构也会逐步优化升级,原本单体单机部署的系统被演化成分布式集群系统,由于分布式系统多线程、多进程并且分布在多个不同机器上,这将使原单机部署情况下的并发控制锁策略无法满足需求。锁的作用是保证多个进程或线程在并发操作操作共享资源时资源的正确性。在分布式应用中,一个服务需要部署多个实例,对于操作分布式环境下的共享资源,就需要使用分布式锁原创 2021-07-01 23:38:53 · 200 阅读 · 4 评论 -
AQS原理详解
AQS 即 AbstractQueuedSynchronizer,是 java.util.concurrent.locks 包的一个重要概念。Java 中锁实现/同步的几种方式:synchronized,ReentrantLock,CAS。其中,可重入锁 ReentrantLock 就是基于 AbstractQueuedSynchronizer(AQS)的。因此,理解 AQS 的实现原理,对 Java 锁理解非常重要。原创 2019-10-24 14:32:45 · 1448 阅读 · 2 评论 -
Netty入门与实战
Netty是一个高性能事件驱动的异步的非堵塞的IO(NIO)网络应用程序框架和工具,基于Netty可以建立高性能的Http服务器。支持HTTP、 WebSocket 、Protobuf、 TCP 和UDP等协议。通过借助Netty,你可以很容易的自己去实现HTTP、FTP、UDP、RPC、WebSocket、Redis的Proxy、MySQL的Proxy服务器等等。原创 2019-11-15 18:08:36 · 536 阅读 · 1 评论 -
NIO原理与实践
NIO 即 New IO,这个库是在 JDK1.4 中才引入的。NIO 和B IO 有相同的作用和目的,但实现方式不同,NIO 主要用到的是块,所以 NIO 的效率要比 BIO 高很多。原创 2018-06-26 15:12:05 · 755 阅读 · 1 评论 -
synchronized关键字解析
采用 synchronized 修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个 monitor (锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只能分配给一个线程,因此叫做互斥锁。在 Java 中,每个对象有一把锁,叫对象锁,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象原创 2019-11-15 17:21:09 · 303 阅读 · 3 评论 -
volatile关键字原理
Java 语言规范 volatile 关键字定义:**Java 编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量**。`volatile`通常被比喻成"轻量级的`synchronized`",也是Java并发编程中比较重要的一个关键字。和`synchronized`不同,`volatile`是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。原创 2018-12-06 11:53:50 · 510 阅读 · 1 评论 -
ThreadLocal详解
经常有人问我有没有什么项目代码,我回复说去 Github 找,但是还是好多人不知道如何找到那些比较好的项目。今天花了点时间找了些安卓的项目,觉得还是不错的,几乎就是自己生活常用的一些 app ,如果你是一个 Android 开发者,我觉得撸完这些项目,你想不牛逼都难。菜鸟新闻菜鸟新闻 客户端是一个仿照36Kr官方,实 时抓取36Kr官网数据的资讯类新闻客...原创 2018-10-19 10:04:26 · 550 阅读 · 2 评论 -
多线程快速入门
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。原创 2017-09-04 22:40:10 · 814 阅读 · 5 评论 -
Java线程池ThreadPoolExecutor的使用及其原理
文章目录介绍什么是线程池线程池的作用关于Java线程池(ThreadPool)jdk提供的线程池有哪些查看Executor源码会发现,Executor只是一个创建线程池的工具类,这四种方式创建的源码就会发现,都是利用 ThreadPoolExecutor 类实现的,真正的线程池接口是ExecutorService,其实现类为ThreadPoolExecutor。创建线程池的原则通常我们使用线程池可以通过如下方式去使用:使用jdk提供的线程池创建自定义线程池线程池的任务队列线程池的任务拒绝策略线程池如何执行分原创 2021-05-16 20:41:11 · 677 阅读 · 0 评论 -
Java线程安全与锁机制
- 从线程是否需要对资源加锁可以分为 悲观锁 和 乐观锁- 从资源已被锁定,线程是否阻塞可以分为 自旋锁- 从多个线程并发访问资源,也就是 Synchronized 可以分为 无锁、偏向锁、 轻量级锁 和 重量级锁- 从锁的公平性进行区分,可以分为公平锁 和 非公平锁- 从根据锁是否重复获取可以分为 可重入锁 和 不可重入锁- 从那个多个线程能否获取同一把锁分为 共享锁 和 排他锁原创 2019-11-13 19:32:00 · 731 阅读 · 0 评论 -
并发框架Disruptor解析
Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。原创 2019-11-14 13:07:00 · 358 阅读 · 1 评论 -
Java多线程通讯
多线程之间通讯,其实就是多个线程在操作同一个资源,互相可以感知到其它线程的状态或行为。线程通讯主要可以分为三种类型,分别为**共享内存**、**消息传递**和**管道流**。每种类型有不同的方法来实现。- 共享内存:线程之间共享程序的公共状态,线程之间通过读-写内存中的公共状态来隐式通信。原创 2017-10-19 17:36:23 · 1312 阅读 · 1 评论 -
太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP ...转载 2021-05-19 09:35:15 · 276 阅读 · 6 评论