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

    8-并发

    并发包 概念 在实际开发中不考虑线程安全的情况下,一般不需要做线程安全处理,防止过多的处理导致性能变差 但是开发中有很多业务需要考虑线程安全的相关问题,此时就必须考虑线程安全的处理 Java为很多业务场景提供了性能优异 ,且线程安全的并发包 ConcurrentHashMap package ConcurrentHashMap; import java.util.HashMap; import java.util.Hashtable 在t1,t2执行完之前,后续主线程都不会执行 * 这就避免了提前打出maps长度导致结果并不是最终运行的结果 * 同时t1,t2都用到了join方法,所以二者之间仍然是并发执行 用户8正在执行! 用户7正在执行! 用户0正在执行! 用户9正在执行! 五个任务全部执行完毕,用户7开始执行! 五个任务全部执行完毕,用户9开始执行! 不是被销毁,如果是销毁则后续c执行传入的任务时获取当前线程得到的必然不是这些已经完成命名的线程),并且循环屏障是达到一组屏障就触发一次任务的执行,而不一定只执行一次 Semaphore 主要作用是控制线程的并发数量

    1.1K10编辑于 2022-10-27
  • 来自专栏Java职业技术分享

    并发模型比较

    参考: 初步探索Nginx高并发原理 ---- Node.js Node.js 也是单线程模型。 线程的堆栈空间在 Windows 下默认 2M,Linux 下默认 8M。这也是 goroutine 单机支持上万并发的原因,因为它更廉价。 所以有一些新的编程模型来实现高并发,用消息传递来代替共享内存和锁。 参考: actor并发模型&基于共享内存线程模型 为什么Actor模型是高并发事务的终极解决方案? 如何深入浅出地解释并发模型中的 CSP 模型并发编程:Actors模型和CSP模型 ---- 总结 高并发的关键在于实现异步非阻塞,更加高效地利用 CPU。多线程可以达到非阻塞,但占用资源多,切换开销大。

    3.1K00发布于 2018-09-28
  • 来自专栏后端技术

    java 并发模型

    根据阅读注释和跟踪父类Queue源码,我们得知,BlockingQueue的方法主要分三类:

    53720发布于 2019-05-25
  • 来自专栏Java职业技术分享

    并发模型比较

    参考: 初步探索Nginx高并发原理 ---- Node.js Node.js 也是单线程模型。 线程的堆栈空间在 Windows 下默认 2M,Linux 下默认 8M。这也是 goroutine 单机支持上万并发的原因,因为它更廉价。 所以有一些新的编程模型来实现高并发,用消息传递来代替共享内存和锁。 参考: actor并发模型&基于共享内存线程模型 为什么Actor模型是高并发事务的终极解决方案? 如何深入浅出地解释并发模型中的 CSP 模型并发编程:Actors模型和CSP模型 ---- 总结 高并发的关键在于实现异步非阻塞,更加高效地利用 CPU。多线程可以达到非阻塞,但占用资源多,切换开销大。

    2.4K00发布于 2018-09-21
  • 来自专栏ReganYue's Blog

    Go并发之CSP并发模型、协程并发

    Go并发之CSP并发模型、协程并发 什么是CSP并发模型 CSP 即通信顺序进程、交谈循序程序,又被译为交换消息的循序程序(communicating sequential processes),它是一种用来描述并发性系统之间进行交互的模型 CSP模型的最大优点是灵活。但是容易出现死锁的情况,且未给予直接的并行支持,并行需要建立在并发的基础之上。 在CSP模型里面,进程间需要经过一种被称为管道来进行通信。 通过管道能够实现百万级的并发。如果说线程是抢占式的,那么协程是协作式的。在协程里面,也是通过管道来调度的。 解放线程对CPU和内存的开销,线程是先占用CPU和内存后才调度,而协程是通过通信发送信号来调度,协程全是通过管道,由于协程的消耗比线程小很多,所以能够实现百万并发8G内存的电脑,用JAVA,C来做并发,差不多也就千级并发,而用GO语言,通过管道可以让并发能力得到很大提升。

    1.2K10发布于 2021-09-16
  • 来自专栏运维开发王义杰

    Go: 并发模型详解

    Go语言的并发模型是基于CSP(Communicating Sequential Processes)理论的,该理论的核心思想是通过通信来共享内存,而不是通过共享内存来通信。 在Go语言中,并发主要依靠两个概念: Goroutine:轻量级的线程,由go关键字启动。 Channel:用于 goroutine 之间通信的管道。 Goroutine Goroutine 是 Go 语言中实现并发的核心机制。 Goroutine 和 Channel 的配合使用 Goroutine 和 Channel 可以配合使用来实现各种并发编程模式。 总结 Go 语言的并发模型是基于 CSP 理论的,通过 Goroutine 和 Channel 的配合使用,可以轻松地实现各种并发编程模式。这种并发模型具有高效、易用等特点,是 Go 语言的一大优势。

    49610编辑于 2024-02-26
  • 学习 Go并发模型

    先将数据拆分放入通道in := producer(1,2,3,4)// 处理数据ch := square(in)// 消费数据for ret := range ch {fmt.Printf("%3d",ret)}}扇形模型优化

    16900编辑于 2025-06-11
  • 来自专栏JUC并发原理与源码

    JUC并发8.并发安全集合二

    8.ConcurrentHashMap的分段锁统计元素数据(1)ConcurrentHashMap维护数组元素个数思路(2)ConcurrentHashMap维护数组元素个数流程(3)维护数组元素个数的 在ConcurrentHashMap中,需要保证对该变量修改的并发安全。如果使用同步锁synchronized,那么性能开销比较大,不合适。 这是因为如果一个集合发生过并发,那么后续发生并发的可能性会更大。如果CAS累加baseCount失败,则尝试使用CounterCell来进行累加。 = null,再尝试对baseCount进行CAS累加 //这是因为如果一个集合发生过并发,那么后续发生并发的可能性会更大,这种思想在并发编程中很常见 if ((as = counterCells )TreeBin的成员变量和方法(3)TreeBin在构造方法中将链表转为红黑树(4)TreeBin在插入元素时实现红黑树的自平衡(1)treeifyBin()方法的逻辑put操作中当发现链表元素>=8时会调用

    28510编辑于 2025-04-28
  • 来自专栏腾讯技术工程官方号的专栏

    20种不同并发模型示例,带你深入理解并发模型

    文末抽奖送书,欢迎参与~ 导语 曾看过很多并发模型相关的文章,但是这些文章大部分只讲了并发模型的实现原理,并没有给出具体的示例代码,看完总觉得对并发模型这个知识点是一知半解,不得要领。 为了掌握高并发模型,我这里抛砖引玉,实现了20种常见的并发模型,并对每种并发模型进行了性能压测和分析。由于本人水平有限,文章中难免有一些不准确或者纰漏的地方,欢迎大家批评指正。 的并发模型是多进程抢锁,每个进程的流量负载会更均衡,但因为有锁,所以进程池1的并发模型性能比进程池2的并发模型低一些。 线程池的并发模型和进程池2的并发模型,性能差异并不是很大,因为线程池的并发模型也是由操作系统来做负载均衡的,所以存在接口长尾的耗时较高的情况。 领导者/跟随者的并发模型和进程池1的并发模型很相似,这两个模型所有的指标都差异很小,领导者/跟随者的并发模型可以看到显式的使用锁,而进程池1的并发模型没有。

    1.5K12编辑于 2024-05-24
  • 来自专栏码农架构

    Java 并发编程:多线程并发内存模型

    Java内存模型 Java的世界也有属于它自己的内存模型,Java内存模型(Java Memory Model),简称JMM。 由于Java被定义成一种跨平台的语言,所以在内存的描述上面也要能是跨平台的,Java虚拟机试图定义一种统一的内存模型,能将各种底层硬件及操作系统的内存访问差异进行封装,使Java程序在不同硬件及操作系统上都能达到相同的并发效果 JMM可见性 在Java内存模型中,如果一个线程更改了共享变量的值,其他线程能马上知道这个更改,则我们说这个变量具有可见性。 要想深入了解多线程并发中的相关问题现象,对Java内存模型的深入研究是必不可少的。 它的定义必须考虑下面几个方面,其一是如何更加有效地提高线程的性能效率;其二是如何将底层物理硬件及操作系统的差异屏蔽掉提供统一的对外概念;最后是如何使它的模型既严谨又宽松,保证语义不会产生歧义和一些优化扩展

    1.1K50发布于 2020-12-14
  • 来自专栏JUC并发原理与源码

    JUC并发8.并发安全集合一

    5.ConcurrentHashMap的Node数组初始化6.ConcurrentHashMap对Hash冲突的处理7.ConcurrentHashMap的并发扩容机制8.ConcurrentHashMap 当链表长度大于等于8 + Node数组长度大于64时,链表会转为红黑树,红黑树的存储使用TreeNode来实现。 最后判断链表的长度是否大于等于8,如果链表的长度大于等于8,再调用treeifyBin()方法决定是扩容数组还是将链表转化为红黑树。 >= 8时,ConcurrentHashMap会对链表采用两种方式进行优化。 方式一:对数组进行扩容当数组长度 <= 64,且链表长度 >= 8时,优先选择对数组进行扩容。方式二:把链表转化为红黑树当数组长度 > 64,且链表长度 >= 8时,会将链表转化为红黑树。

    23810编辑于 2025-04-28
  • 来自专栏狗哥的 Java 世界

    Java 并发8)CyclicBarrier 源码分析

    现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。

    50210发布于 2020-04-14
  • 来自专栏互联网技术栈

    七周七并发模型

    image.png 七个模型来介绍并发与并行。 线程与锁:线程与锁模型有很多众所周知的不足,但仍是其他模型的技术基础,也是很多并 发软件开发的首选。 函数式编程:函数式编程日渐重要的原因之一,是其对并发编程和并行编程提供了良好的支 持。函数式编程消除了可变状态,所以从根本上是线程安全的,而且易于并行执行。 actor:actor模型是一种适用性很广的并发编程模型,适用于共享内存模型和分布式内存模型, 也适合解决地理分布型问题,能提供强大的容错性。 不过CSP模型侧重于传递信息的通道,而actor模型侧重于通道 两端的实体,使用CSP模型的代码会带有明显不同的风格。 数据级并行:每个笔记本电脑里都藏着一台超级计算机——GPU。  这个模型适用于解决并发问题、并行问题,还是两者皆可  这个模型适用于哪种并行架构  这个模型是否有利于我们写出容错性强的代码,或用于解决分布式问题的代码---- 个人介绍: 高广超:多年一线互联网研发与架构设计经验

    74320发布于 2018-12-12
  • 来自专栏数据云团

    并发篇-python传输模型

    画重点啦~ >传输模型 先来了解下基本模型 ? 能看懂上面的模型么?大致想到是两个人在打电话吧。 有了基本模型,再了解下它的层次划分。 ? 请注意它的高亮区域! 回顾下传输模型 层次划分 | 传输层 | TCP协议 >TCP连接 三次握手是怎样的呢? ? 为什么是三次?

    46730发布于 2019-07-18
  • 来自专栏木东居士的专栏

    漫谈并发编程:Actor模型

    0x00 前言 一般来说有两种策略用来在并发线程中进行通信:共享数据和消息传递。 本文主要是来分享Scala的Actor模型。 文章结构 本篇博客尝试讲解Actor模型。 但包括面向对象语言在内的软件通常是顺序执行的,而Actor模型本质上则是并发的。 println) } 运行看一下结果: (best,1) (brown,1) (family,5) (belong,5) (same,5) (to,6) (and,6) (fox,6) (dog,8) (the,8) 0x04 总结 本来是想搞Go的并发编程的,但是CSP和Actor模型有很多接近的地方,想搞CSP模型,总是要看Actor的,因此就先花了点时间看一下Actor模型

    3.9K51发布于 2018-05-25
  • 来自专栏子曰五溪

    技术 | JavaScript的“并发模型

    说到并发应该很多人会想到多线程或多进程,很遗憾JavaScript是单线程的,但是JavaScript也有一个很有趣的东西,可以让你产生在使用多线程的感受,事件循环(Event Loop)提供了一些很有意思的东西

    73620发布于 2019-06-24
  • 来自专栏方丈的寺院

    单机高并发模型设计

    背景 在微服务架构下,我们习惯使用多机器、分布式存储、缓存去支持一个高并发的请求模型,而忽略了单机高并发模型是如何工作的。 这篇文章通过解构客户端与服务端的建立连接和数据传输过程,阐述下如何进行单机高并发模型设计。 经典C10K问题 如何在一台物理机上同时服务10K用户,及10000个用户,对于java程序员来说,这不是什么难事,使用netty就能构建出支持并发超过10000的服务端程序。 应用程序进行decode,业务逻辑处理,最后encode,再发送出去,返回给客户端 因为是一个线程处理一个连接数据,对应的线程模型是这样 多路复用 阻塞vs非阻塞 因为一个连接传输,一个线程,需要的线程数太多 以上就是大名鼎鼎的reactor高并发模型

    85220编辑于 2022-11-08
  • 来自专栏一起学Golang

    Golang并发模型:select进阶

    前一篇文章《Golang并发模型:轻松入门select》介绍了select的作用和它的基本用法,这次介绍它的3个进阶特性。 x.go for: 0 read: 0 for: 1 read: 1 for: 2 read: 2 for: 3 gen exit for: 4 for: 5 for: 6 for: 7 for: 8 当你开发一个并发程序的时候,main函数千万不能在子协程干完活前退出啊,不然所有的协程都被迫退出了,还怎么提供服务呢?

    74330发布于 2019-04-11
  • 来自专栏gojam技术备忘录

    并发模型与事件循环

    #constructor 构造函数 #原型链&继承 #Promise #函数生成器 #async...await #并发模型与事件循环 JavaScript的并发模型基于事件循环。 先同步,后异步。

    1K20发布于 2019-09-09
  • 来自专栏专注 Java 基础分享

    并发而生的 ConcurrentHashMap(Java 8

    当然,它毕竟不是并发容器,除非大改,否则依然是不能应对高并发场景的,或者说即使没有因多线程访问而造成什么问题,但是效率必然是受到影响的。 本篇文章将要介绍的 ConcurrentHashMap 是 HashMap 的并发版本,它是线程安全的,并且在高并发的情境下,性能优于 HashMap 很多。 我们主要从以下几个方面对其进行学习: 历史版本的实现演变 重要成员属性的介绍 put 方法实现并发添加 remove 方法实现并发删除 其他的一些方法的简单介绍 一、历史版本的实现演变 jdk 1.7 三、put 方法实现并发添加 对于 HashMap 来说,多线程并发添加元素会导致数据丢失等并发问题,那么 ConcurrentHashMap 又是如何做到并发添加的呢? = 0) { //链表深度超过 8 转换为红黑树 if (binCount >= TREEIFY_THRESHOLD) treeifyBin

    2.7K120发布于 2018-01-04
领券