首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Java实战博客

    1 Netty 网络并发框架

    Netty是当前非常流行的网络通讯开源框架并发可靠,底层就可以用Netty支撑。 端 并发应用 本质是NIO框架,适用于服务器通讯的多种场景 什么是同步 和 异步 同步: 浏览器发送请求,等待服务端进行相应后浏览器在做操作 这个过程就叫同步 异步:浏览器发送请求,无需服务器响应出结果 ,继续浏览器渲染接下来的操作,这个过程就叫异步 Netty 结构图 Netty 是基于 JDK下的NIO 的框架 image.png Netty 场景 RPC框架 :阿里的分布式框架Dubbo用到了 手游 I/O模型使用场景 BIO:适用于连接数目少且固定的架构,并发不适用,是JDK1.4之前唯一选择 NIO:适用于连接数目多,但是连接短。JDK1.4 开始支持。 会利用OS惨与并发操作,编程较为复杂。

    97220编辑于 2022-01-19
  • 来自专栏C++学习历程

    并发内存池框架设计

    项目源码:https://gitee.com/kkkred/thread-caching-malloc 引言 在并发场景(如百万QPS的API网关、实时游戏服务器)中,内存分配的延迟与碎片是性能瓶颈的核心来源 传统单内存池因全局锁竞争和内存碎片问题,难以满足吞吐需求。 获取逻辑,揭示并发场景下内存分配的「无锁化」与「高效协同」之道。 五、总结与性能优化 并发内存池框架通过​​ThreadCache(本地无锁)、CentralCache(全局协调)、PageCache(系统桥梁)​​的三级架构,实现了: ​​低延迟​​:ThreadCache 的无锁操作+哈希桶索引的O(1)计算,将分配/释放延迟降至O(1); ​​低碎片​​:按Size Class分类+页级对齐的设计,减少内存碎片; ​​并发​​:线程本地存储避免了全局锁竞争,分段锁/双链表优化了多线程协作

    37610编辑于 2025-07-10
  • 来自专栏路人甲Java

    java并发系列-第2天:并发级别

    这是java并发系列第2篇文章,一个月,咱们一起啃下java并发,欢迎留言打卡,一起坚持一个月,拿下java并发。 由于临界区的存在,多线程之间的并发必须受到控制。 根据控制并发的策略,我们可以把并发的级别分为阻塞、无饥饿、无障碍、无锁、无等待几种。 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。 图1.7中显示了非公平锁与公平锁两种情况(五角星表示优先级线程)。对于非公平锁来说,系统允许优先级的线程插队。这样有可能导致低优先级线程产生饥饿。 应该比较熟悉,表中需要一个字段version(版本号),每次更新数据version+1,更新的时候将版本号作为条件进行更新,根据更新影响的行数判断更新是否成功,伪代码如下: 1.查询数据,此时版本号为w_v 2. java并发系列目录: 1.java并发系列-第1天:必须知道的几个概念 希望您能把这篇文章分享给更多的朋友,让它帮助更多的人。帮助他人,快乐自己,最后,感谢您的阅读。微信扫码入群一起交流。

    1K30发布于 2019-12-10
  • 来自专栏技术趋势

    秒级达百万并发框架-Disruptor

    Disruptor介绍 Disruptor是一个高性能的并发框架,主要应用于创建具有吞吐量、低延迟、无锁(lock-free)的数据结构和事件处理系统。 它最初由LMAX公司开发的,已经成为了业界广泛使用的高性能并发框架。 Disruptor框架的特点和优势包括: 高性能:Disruptor框架能够通过无锁的方式提供非常并发性能和吞吐量,比如在大规模消息发布订阅场景下,能够每秒处理数百万个消息。 Disruptor 的吞吐量、低延迟以及可扩展性好的特点,使得它成为许多高并发应用的首选方案之一。 Disruptor的基本使用 以下是用于disruptor这个框架的基本功能的学习demo。 ,只是我们很多时候不了解而以,较老一点的程序人应该都有所了解~,当然本文主要是用于了解Disruptor这个框架实现源理和基本应用以便后续一些并发场景设计方案可以借鉴,希望能与各位共同前进~,最后可以参考下面文献还是挺不错的借鉴

    3.3K20编辑于 2023-09-01
  • 来自专栏半生瓜のblog

    【Linux】多进程并发设计框架示例

    多进程并发设计框架 建议根据cpu核心数量来设置子进程的数量。 建议将对应某一进程绑定到某一cpu上。(cpu亲缘性) 优点: 充分利用多核系统的并发处理能力。 cpu亲缘关系,将进程绑定在其中的一个核上 static void worker_process_init(int worker){ cpu_set_t cpu_affinity; //多核并发处理

    94520编辑于 2023-05-13
  • 来自专栏卯金刀GG

    并发Java(2):多线程基础

    如果使用多进程,那么并发数相对来说不会很高。而线程是更细小的调度单元,更加轻量级,所以线程会较为广泛的用于并发设计。 在Java当中线程的概念和操作系统级别线程的概念是类似的。 start(); t1.resume(); t2.resume(); t1.join(); t2.join(); } } 让t1 结果输出是: 1 2 in t1 in t2 说明两个线程都争夺到了锁,但是控制台的红灯还是亮着的,说明t1,t2一定有线程没有执行完。我们dump出堆来看看 ? 发现t2一直被suspend。 low.setPriority(Thread.MIN_PRIORITY); low.start(); high.start(); } } 让一个优先级的线程和低优先级的线程同时争夺一个锁 当然并不一定是优先级一定先完成。再多次运行后发现,优先级完成的概率比较大,但是低优先级还是有可能先完成的。 5.

    68720发布于 2019-07-25
  • 来自专栏路人甲Java

    java并发系列 - 第20天:JUC中的Executor框架详解2

    这是java并发系列第20篇文章。 java并发系列目录 1.java并发系列-第1天:必须知道的几个概念 2.java并发系列-第2天:并发级别 3.java并发系列-第3天:有关并行的两个重要定律 4.java并发系列 - 8.java并发系列 - 第8天:线程组 9.java并发系列 - 第9天:用户线程和守护线程 10.java并发系列 - 第10天:线程安全和synchronized关键字 11.java并发系列 并发系列 - 第14天:JUC中的LockSupport工具类 15.java并发系列 - 第15天:JUC中的Semaphore(信号量) 16.java并发系列 - 第16天:JUC中等待多线程完成的工具类 19.java并发系列 - 第19天:JUC中的Executor框架详解1

    64020发布于 2019-12-10
  • 来自专栏冰河技术

    并发】如何使用Java7中提供的ForkJoin框架实现并发程序?

    作者个人研发的在并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。 ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之? class ForkJoinTaskExample extends RecursiveTask<Integer> { public static final int threshold = 2; log.error("exception", e); } } } 写在最后 如果觉得文章对你有点帮助,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习并发编程技术 最后,附上并发编程需要掌握的核心技能知识图,祝大家在学习并发编程时,少走弯路。 ?

    1.1K10发布于 2020-10-29
  • 来自专栏Java Web

    并发编程学习(2)——线程通信详解

    为获得良好的阅读体验,请访问原文: 传送门 前序文章 并发编程学习(1)——并发基础 - https://www.wmyskxz.com/2019/11/26/gao-bing-fa-bian-cheng-xue-xi ); } finally { lock.unlock(); } } 允许多个线程同时访问:信号量(Semaphore) 以下内容摘录 or 改编自 《实战 Java 并发程序设计 指令重排/ happen-before 原则 再从另一个有趣的例子中入手,这是在并发场景下会存在的问题: class LazyInitDemo { private static TransationService 在并发的情况下,该对象引用在没有同步的情况下进行读写操作,导致用户可能会获取未构造完成的对象。 这是因为指令优化的结果。 计算机不会根据代码顺序按部就班地执行相关指令,我们来举一个借书的例子:假如你要去还书并且想要借一个《并发编程学习》系列丛书,而你的室友恰好也要还书,并且还想让你帮忙借一本《Java 从入门到放弃》。

    60440发布于 2019-11-29
  • 来自专栏Java那些事

    并发编程学习(2)——线程通信详解

    前序文章 并发编程学习(1)——并发基础 - https://www.wmyskxz.com/2019/11/26/gao-bing-fa-bian-cheng-xue-xi-1-bing-fa-ji-chu ); } finally { lock.unlock(); } } 允许多个线程同时访问:信号量(Semaphore) 以下内容摘录 or 改编自 《实战 Java 并发程序设计 在并发的情况下,该对象引用在没有同步的情况下进行读写操作,导致用户可能会获取未构造完成的对象。 这是因为指令优化的结果。 计算机不会根据代码顺序按部就班地执行相关指令,我们来举一个借书的例子:假如你要去还书并且想要借一个《并发编程学习》系列丛书,而你的室友恰好也要还书,并且还想让你帮忙借一本《Java 从入门到放弃》。 courseId=1003108028[5] 《Java 并发编程的艺术》 《码出高效 Java 开发手册》 - 杨冠宝(孤尽) 海慧(鸣莎)著 Java 面试知识点解析(二)——并发编程篇 - https

    60330发布于 2019-12-02
  • 来自专栏架构专题

    没有预热,不叫并发,叫并发

    大家都知道,并发系统有三把斧子:缓存、熔断和限流。但还有一把斧子,经常被遗忘在角落里,郁郁不得志,那就是预热。 ? 现象举例 先说两个现象。这些现象,只能在并发的系统中出现。 一、DB重启后,瞬间死亡 一个并发环境下的DB,进程死亡后进行重启。由于业务处在高峰期间,上游的负载均衡策略发生了重分配。刚刚启动的DB瞬间接受了1/3的流量,然后load疯狂飙升,直至再无响应。 当服务重新加入集群时,却发生了大量耗时的请求,在请求量的情况下,甚至大批大批的失败。 引起的原因大概可以归结于: 1、服务启动后,jvm并未完全准备完毕,JIT未编译等。 2、你的应用通过了一些复杂的中间件和路由规则,最终定位到某一台DB上。 3、你的终端,可能通过了MQTT协议,直接连上了MQTT服务端。 2、给这些资源分配一些权重,比如最大权重为100,配置100秒之后冷启动成功。假如现在是第15秒,则总权重就是100*(n-1)+15。

    3.2K21发布于 2019-07-10
  • 来自专栏服务器优惠介绍

    并发服务器框架设计方案

    简单谈一谈并发服务器框架设计的基本思路 基本的服务器框架都是C/S结构的,请求和相应流程是这样的: 这样的框架存在一个很严重的问题,当客户端并发请求到来,服务器需要进行大量的数据库操作,假设数据库最大连接数为 gao2.png DAL设计缓冲队列,存储等待的请求,并且DAL中设计数据库连接池,当数据库连接池中有空闲连接, 那么从缓冲队列中取出一个请求处理,以此类推。 这种做法有效的降低了服务器的压力,但是没有提高处理速度, 仅仅保证了请求被缓存,处理效率仍受限于数据库的并发数。 2 环境切换 ,多线程上下文切换造成开销。如果服务器是单核的,那么采用状态机方式单线程效果最佳。如果是多核的, 合理采用多线程,可以提升性能。 3 内存分配,可以采用内存池,提前分配。 到此为止,服务器框架介绍完毕。

    1.6K11发布于 2019-07-11
  • 来自专栏上云

    并发服务器框架设计方案

    简单谈一谈并发服务器框架设计的基本思路 基本的服务器框架都是C/S结构的,请求和相应流程是这样的: [gao1.png] 这样的框架存在一个很严重的问题,当客户端并发请求到来,服务器需要进行大量的数据库操作 [gao2.png] DAL设计缓冲队列,存储等待的请求,并且DAL中设计数据库连接池,当数据库连接池中有空闲连接, 那么从缓冲队列中取出一个请求处理,以此类推。 2 环境切换 ,多线程上下文切换造成开销。如果服务器是单核的,那么采用状态机方式单线程效果最佳。如果是多核的, 合理采用多线程,可以提升性能。 3 内存分配,可以采用内存池,提前分配。 到此为止,服务器框架介绍完毕。 并发服务器框架设计方案用到的腾讯云产品: 腾讯云服务器:https://cloud.tencent.com/product/cvm 腾讯云数据库:https://cloud.tencent.com/product

    1.7K11发布于 2019-07-08
  • 来自专栏Java职业技术分享

    Java异步NIO框架Netty实现高性能并发

    作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。 2. 相比于其它开源的序列化框架,Java序列化后的码流太大,无论是网络传输还是持久化到磁盘,都会导致额外的资源占用; 3) 序列化性能差(CPU资源占用)。 开发人员一般可以根据自己的需要来选择合适的模式,一般来说,低负载、低并发的应用程序可以选择同步阻塞IO以降低编程复杂度。但是对于负载、并发的网络应用,需要使用NIO的非阻塞模式进行开发。 但是对于负载、大并发的应用却不合适,主要原因如下: 1) 一个NIO线程同时处理成百上千的链路,性能上无法支撑,即便NIO线程的CPU负荷达到100%,也无法满足海量消息的编码、解码、读取和发送; 2 主要分享分布式架构、可扩展、高性能、并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频。

    3.2K10发布于 2018-09-28
  • 来自专栏技术记录

    netty框架实现websocket达到并发

    但是在实际项目中,那样的用法是不可取的,理由是tomcat对并发的支持不怎么好,特别是tomcat9之前,可以测试发现websocket连接达到的数量很低,且容易断开。 什么是Netty Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架Avro就使用了 Netty作为底层通信框架,其他还有业界主流的RPC框架,也使用Netty来构建高性能的异步通信能力。 ; 性能,通过与其他业界主流的NIO框架对比,Netty的综合性能最优; 成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼; 社区活跃,版本迭代周期短 throws Exception { cause.printStackTrace(); ctx.close(); } } 以上就是netty-websocket的Demo了,应该已经解释的很详细了,同时应对的并发量也满足一般企业用于

    10.3K110发布于 2018-01-30
  • 来自专栏小勇DW3

    Mysql面对并发修改的问题处理【2

    在MySQL5.6开始提供了online ddl功能,允许一些DDL语句和DML语句并发,在当前5.7版本对online ddl又有了增强,这使得大部分DDL操作可以在线进行。 DML并发,不会阻塞线上业务; 3、推荐使用percona公司的pt-online-schema-change工具,该工具被官方的online ddl更为强大,它的基本原理是:通过insert… select 即事务1、事务2。 即事务1、事务2。 注意:此时事务2并没有回滚。 监控到当前运行事务数为2。 T5 commit; 事务1已提交,事务2未提交,监控到当前运行事务数为1。

    1.9K10发布于 2020-09-07
  • 来自专栏高性能服务器开发

    数据库进阶2 Mysql并发优化

    所以在考虑整个系统的流程的时候,我们必须要考虑,在并发大数据量的访问情况下,我们的系统会不会出现极端的情况。 (例如:对外统计系统在7月16日出现的数据异常的情况,并发大数据量的的访问造成,数据库的响应时间不能跟上数据刷新的速度造成。 在低并发访问的情况下,不会发生问题,但是当日期临界时的访问量相当大的时候,在做这一判断的时候,会出现多次条件成立,则数据库里会被插入多条当前日期的记录,从而造成数据错误。) T2 WHERE T2.C2=T1.C2) 两者产生相同的结果,但是后者的效率显然要高于前者。 18.尽量避免大事务操作,提高系统并发能力。 19.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。 20. 避免使用不兼容的数据类型。

    2.3K10发布于 2018-07-25
  • 来自专栏Coding迪斯尼

    go实现并发可用分布式系统:设计类似kafka的并发海量数据存储机制2

    log.v1; option go_package = "api/log_v1"; message Record { bytes value = 1; uint64 offset = 2; * 这里的排序很重要,假设当前我们已经接收到了500条日志,如果每100条对应一个segment,于是在磁盘上就要0.stroe,0.index, 1.store, 1.index, 2. store, 2.index, 3.store,3.index; 4.store,4.index.排好序后,如果要查询的日志下标为 250,那么我们可以快速定位到segments[2],然后再从里面查询下标为 uint64(0), off) off, err = o.HighestOffset() require.NoError(t, err) require.Equal(t, uint64(2) uint64(0), off) off, err = n.HighestOffset() require.NoError(t, err) require.Equal(t, uint64(2)

    69510编辑于 2022-01-17
  • 来自专栏后台技术底层理解

    redis并发可用

    redis 实现并发主要依靠主从架构,一主多从. 对于性能来说,单主用来写入数据,单机几万QPS,多从用来查询数据,多个从实例可以提供每秒 10w 的 QPS。 如果想要在实现并发的同时,容纳大量的数据,那么就需要 redis 集群, 使用 redis cluster 模式,可以提供每秒几十万的读写并发。 这样也可以很轻松实现水平扩容,支撑读并发。 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况,所以为了缓解读的压力,所以进行读写分类,并对读进行扩展。 优点: 1、有效的解决了redis在分布式方面的需求 2、遇到单机内存,并发和流量瓶颈等问题时,可采用Cluster方案达到负载均衡的目的 3、可实现动态扩容 4、P2P模式,无中心化 5、通过Gossip ==怎么保证redis是并发以及可用的==? sdown 和 odown 转换机制 sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机。

    3.2K10发布于 2020-08-04
  • 来自专栏后台及大数据开发

    并发】秒杀系统并发请求排队处理

    今天无意中看见了这位兄弟的文章 通过请求队列的方式来缓解并发抢购(初探)  但文章最后说并发超过500 就会出现超发,看了下代码,的确有这个问题 抽空简单完善了下,经压力测试后发现暂无超发现象, 下面为我的代码 private int userId = new Random().nextInt(100000);// 用户ID private int status;// 0:未处理;1:正常;2: return status; } public void setStatus(int status) { this.status = status; } } 2. (OrderRequest orderRequest) { if (orderRequest.getStatus() == 0) { int status = 2; 欢迎指正 由于是在windows下测试,并发高了就报错  java.net.BindException: Address already in use  这个初看上去很像端口被占用,其实是因为已经完成请求的

    4K11发布于 2018-08-02
领券