并发编程


多进程、多线程与协程的引入

为什么需要并发编程 在原生 PHP 中并没有并发的概念,所有的操作都是串行执行的、同步阻塞的,这也是很多人诟病 PHP 性能的原因,...

由 学院君 发布于4年前    浏览数: 20615    点赞数: 13

Go 协程实现原理和使用示例

Go 并发编程原理 Go 语言的协程实现被称之为 goroutine,由 Go 运行时管理,在 Go 语言中通过协程实现并发编程非...

由 学院君 发布于4年前    浏览数: 20618    点赞数: 6

Go 协程通信实现(上)—— 共享内存

在上篇教程中,我们已经演示了如何通过 goroutine 基于协程在 Go 语言中实现并发编程,从语法结构来说,Go 语言的协程是非...

由 学院君 发布于4年前    浏览数: 16052    点赞数: 10

Go 协程通信实现(下)—— 通过 channel 进行消息传递

上篇教程学院君演示了如何通过共享内存实现协程通信,不过这种方式太过繁琐,且维护成本高,Go 语言推荐使用消息传递实现并发通信,这种消...

由 学院君 发布于4年前    浏览数: 17475    点赞数: 5

通道类型篇(一):基本语法和缓冲通道

在上篇教程中,学院君给大家演示了如何通过通道(channel)传递消息实现 Go 协程间的通信, 接下来,我们将通过几篇教程的篇幅来...

由 学院君 发布于4年前    浏览数: 12965    点赞数: 3

通道类型篇(二):单向通道及其使用

上篇教程我们介绍了管道类型的基本语法,通常,管道都是支持双向操作的:既可以往管道发送数据,也可以从管道接收数据。但在某些场景下,可能...

由 学院君 发布于4年前    浏览数: 12640    点赞数: 3

通道类型篇(三):通过 select 语句等待通道就绪

Go 语言还支持通过 select 分支语句选择指定分支代码执行,select 语句和之前介绍的 switch 语句语法结构类似,不...

由 学院君 发布于4年前    浏览数: 10457    点赞数: 7

通道类型篇(四):错误和异常处理

在前面几篇通道教程中,我们陆续介绍了与通道相关的基本语法、单向通道以及 select 语句,有关通道的基本知识就介绍到这里,今天我们...

由 学院君 发布于4年前    浏览数: 8905    点赞数: 6

利用多核 CPU 实现并行计算

开始之前,我们先澄清两个概念,「多核」指的是有效利用 CPU 的多核提高程序执行效率,「并行」和「并发」一字之差,但其实是两个完全不...

由 学院君 发布于4年前    浏览数: 17801    点赞数: 4

sync 包(一):sync.Mutex 和 sync.RWMutex

sync 包 我们前面反复强调,在 Go 语言并发编程中,倡导「使用通信共享内存,不要使用共享内存通信」,而这个通信的媒介就是我们...

由 学院君 发布于4年前    浏览数: 15040    点赞数: 7

sync 包(二):条件变量 sync.Cond

sync 包还提供了一个条件变量类型 sync.Cond,它可以和互斥锁或读写锁(以下统称互斥锁)组合使用,用来协调想要访问共享资源...

由 学院君 发布于4年前    浏览数: 10455    点赞数: 2

sync 包(三):原子操作

中断与原子操作 我们在前两篇教程中讨论了互斥锁、读写锁以及基于它们的条件变量。互斥锁是一个同步工具,它可以保证每一时刻进入临界区的...

由 学院君 发布于4年前    浏览数: 8721    点赞数: 1

sync 包(四):sync.WaitGroup 和 sync.Once

在介绍通道的时候,如果启用了多个子协程,我们是这样实现主协程等待子协程执行完毕并退出的:声明一个和子协程数量一致的通道数组,然后为每...

由 学院君 发布于4年前    浏览数: 9726    点赞数: 4

通过 context 包提供的函数实现多协程之间的协作

上篇教程学院君介绍了如何通过 sync.WaitGroup 类型优化通道对多协程协调的处理,但是现在有一个问题,就是我们在启动子协程...

由 学院君 发布于4年前    浏览数: 10034    点赞数: 0

sync 包(五):临时对象池 sync.Pool

前面我们已经陆续介绍了 sync 包提供的各种同步工具,比如互斥锁、条件变量、原子操作、多协程协作等,今天我们来看另外一种工具。 ...

由 学院君 发布于4年前    浏览数: 10297    点赞数: 1

搜索结果