自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Java & Go 并发编程系列

该系列的文章,根据每篇文章的主题,分别用示例代码介绍 Java 和 Go 语言中的相关实现。涉及到 Java 中的 BlockingQueue、Future、CountDownLatch、invokeAny、invokeAll、Semaphore、Lock、ReadWriteLock、Condition等,涉及到 Go 中到 channel、sync.WaitGroup、sync.Mutex、sync.RWMutex、sync.Cond 等。

2020-08-26 12:29:53 544

原创 【一分钟系列】openresty(lua)调试语句(非常实用)

OpenResty 是一款基于 NGINX 和 LuaJIT 的 Web 平台。在基于 openresty 编写 lua 代码进行调试时,可以加入一行语句让代码提前中止,也可以结合日志框架打印调试信息定位问题。

2020-09-11 18:34:37 1307

原创 【Java&Go并发编程系列】11.条件变量——Condition VS sync.Cond

条件变量基于锁,用以协调多个线程进入临界区。

2020-08-27 12:45:38 273

原创 【Java&Go并发编程系列】10.读写锁——ReadWriteLock VS sync.RWMutex

读写锁,顾名思义,就是把读和写区分对待了。读写锁具有以下特点: 写操作和写操作是互斥的; 写操作和读操作也是互斥的; 读操作和读操作不互斥。 也就是说,读写锁与互斥锁一个重要区别是,读写锁允许多个线程同时读共享资源。读写锁可以基于此,实施更加细致的访问控制。

2020-08-27 07:58:31 255

原创 【Java&Go并发编程系列】9.互斥锁——Lock VS sync.Mutex

互斥锁,用来保证同一时刻只有一个线程进入临界区访问共享资源。在进入临界区之前,需要先获得锁,成功获得锁之后,其他线程因为无法获得锁所以不能进入该临界区。而访问结束之后,需要及时解锁,以便其他线程获取。

2020-08-26 22:18:10 400 2

原创 【Java&Go并发编程系列】8.原子操作——java.util.concurrent.atomic VS sync.atomic

原子操作,通过底层硬件的支持,来保证整个操作的原子性,所以原子操作也是并发安全的。Java 和 Go 语言都提供了支持原子操作的并发工具类,分别在 java.util.concurrent.atomic 和 sync.atomic 包里面。本文介绍其中两种比较常用的操作:原子加法和比较并交换CAS(compare and swap)

2020-08-26 22:16:32 323

原创 【Java&Go并发编程系列】7.信号量——Semaphore VS channel

信号量通常用于限制并发访问共享资源的线程数。线程在访问共享资源前,需要通过信号量获得许可,然后才可以继续访问。访问结束后需要把许可释放,以便其他线程可以访问。

2020-08-26 22:13:06 311

原创 【Java&Go并发编程系列】6.运行多个任务并处理所有结果——invokeAll VS channel

本文介绍 Java 和 Go 语言中如何实现运行多个并发任务,并处理所有任务的返回结果的场景。

2020-08-26 22:09:15 304

原创 【Java&Go并发编程系列】5.运行多个任务并处理第一个结果——invokeAny VS channel

本文介绍 Java 和 Go 语言中如何实现运行多个并发任务,但只处理第一个已完成任务的结果的场景。

2020-08-26 22:06:25 214

原创 【Java&Go并发编程系列】4.等待一组并发任务完成——CountDownLatch VS sync.WaitGroup

本文介绍 Java 和 Go 语言中如何实现并发编程中等待一组并发任务完成的场景。

2020-08-26 22:04:21 381

原创 【Java&Go并发编程系列】3.执行异步计算并获取结果——Future VS channel

在并发编程中,通过异步的方式来执行一个计算任务并获取结果是常用的场景。通过提交执行一个异步的计算任务,然后就可以去执行其他的任务了,在需要异步计算结果时再去获取,以提升程序的处理能力。

2020-08-26 21:33:00 437

原创 【Java&Go并发编程系列】2.阻塞队列与通道——BlockingQueue VS channel(下篇)

上一篇将非缓冲通道、缓冲通道和 Java 中的阻塞队列 SynchronousQueue、LinkedBlockingDeque 做一个类比。本篇将进一步介绍有限容量的 buffered channel 和 LinkedBlockingQueue 的基本操作。然后再单独说明零容量的工具与有限容量在操作上的主要差异。

2020-08-26 12:50:01 554

原创 【Java&Go并发编程系列】1.阻塞队列与通道——BlockingQueue VS channel(上篇)

channel(通道)是 Go 语言非常具有代表性的数据类型,相当于一个先进先出的队列。通道支持发送和接收操作,用<-表示,箭头的方向代表数据的传输方向,并且发送操作之间是互斥的,接收操作之间也是互斥的。使用 channel 可以很方便的在多个 Goroutine(用户级线程,也称协程)之间进行通信。 channel 分为缓冲通道和非缓冲通道(容量为0)。本文将非缓冲通道、缓冲通道和 Java 中的阻塞队列 SynchronousQueue、LinkedBlockingDeque 做一个类比。

2020-08-26 12:42:09 1169

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除