3D 视角看 Go 并发编程

主题:3D 视角看 Go 并发编程

Overview

  • 并发编程综述
  • Goroutine
  • Channel & Select & waitGroup
  • 消息传递模式
  • 可视化工具 GoTrace

主讲师:PP

先后在百度、第四范式、蚂蚁金服工作,百度 Go Good Coder, 对分布式计算、离线/实时大数据处理有丰富的实战经验。乐于分享自己的技术和学习心得。

一、并发编程综述

串行执行

并发与并行

多核时代的并发编程

左图:p1, p2, p3 这 3 个线程运行在单核上,分时复用 CPU,是并发执行。

右图:p1, p2, p3, p4 这 4 个线程运行在双核 CPU 上, 每个核上的线程是分时复用并发执行的, 而两个 CPU 内核在同一时间内都有线程在执行,这就是并行执行。

二、Goroutine

Goroutine helloworld 3D 可视化(1)

Goroutine helloworld 3D 可视化(2)

三、Channel & Select & waitGroup

Channel

  • Channel 是 Goroutine 之间进行通信/消息传递的一种方式, 可以通过 <- 操作符向 Channel 里发送和接受数据:
  • 并发模型: 消息传递 VS 共享内存

Channel 的 3D 可视化(1)


Channel 的 3D 可视化(2) – Timer


Channel 的 3D 可视化 (3) – 乒乓球程序


Select

  • select 语句让 goroutine 等待多个通信操作
  • select 会等待 case 中有能够执行的 case 时去执行
  • 如果多个 case 同时就绪时,select 会随机地选择一个执行

Select 的 3D 可视化

waitGroup

类似 Java 的 countDownLatch, 计数等待一组 goroutine 运行结束

四、消息传递模式

  • Fade In
  • Fade Out(workers)
  • Servers
  • Server + Worker

五、3D 可视化工具 GoTrace

https://github.com/divan/gotrace

分享时间:18年4月4日(周四)21:00——22:00

具体的参与方式:加小助手微信WeChat : 1251743084 备注“公开课” 进入直播分享群

原文地址:http://blog.51cto.com/51reboot/2094287

时间: 2024-08-30 01:06:27

3D 视角看 Go 并发编程的相关文章

最近在看java并发编程。值得一看。向爱好java的朋友强烈推荐

<java7并发编程实战>

C#并发编程

最近看C# 并发编程··,这里做一下总结··多线程,异步,并行,大部分都是最近看C#并发编程这个书涉及到的··这里仅仅列出实现方式,书里边介绍的其他的东西没有设计比如取消操作,同步操作,集合之类的东西 线程:Thread,ThreadPool,BackgroundWorker, Thread 可以又更多控制··ThreadPool就是丢进去系统好管理线程,BackgroundWorker相当于加了事件的线程,用在thread执行函数里边加事件,外边注册加invoke就可以实现类似backgrou

java并发编程使用锁进行数据同步操作一

项目中总是出现招标项目超投的情况,最开始总是觉得应该使用框架Hibernate自带的并发策略中的乐观锁(version)解决问题,参考了很多网上的资料,也参考了Hibernate的帮助文档,由于对Hibernate乐观锁机制不了解,问题就一直没有解决. 最近在看Java并发编程相关知识,了解了些许并发,线程,锁的知识.想到了这个问题,曾经使用Synchroized关键字时总是苦于无法获取同一个对象,导致解决方案无效.这次采用的方案是:创建了静态的HashMap<Integer,Lock>,初始

从一篇Blog看两个并发编程错误

发现公司支付宝接入的代码有点神奇,在网上搜索了下,找到原始版本.估计有不少人都是抄那份代码的. 原文在:http://blog.csdn.net/simdanfeg/article/details/9011603    Android支付接入(一):支付宝 但是代码里有两个明显的并发问题,尽管在Android下可能不会有问题. 下面摘抄一段: public class MobileSecurePayer { <strong>Integer lock = 0; </strong> /

并发编程(二):全视角解析volatile

一.目录 1.引入话题-发散思考 2.volatile深度解析 3.解决volatile原子性问题 4.volatile应用场景 二.引入话题-发散思考 public class T1 { /*volatile*/ boolean running=true; public void m(){ System.out.println(Thread.currentThread().getName()+":start!"); while(running){ /*try { TimeUnit.M

Java并发编程 - 逐级深入 看线程的中断

最近有足够的空闲时间 去东看看西看看,突然留意到在Java的并发编程中,有关线程中断的,以前初学时一直没弄清楚的一些小东西. 于是,刚好把收获简单的总结一下,通过此文来总结记录下来. 从源码看线程的状态 在开始分析线程的中断工作之前,我们肯定要先留意一个点,那就是肯定是有开启,才会有与之对应的中断工作出现. 开启一个线程的工作,相信每个Javaer都烂熟于心.它很简单,new一个thread对象,然后调用start方法开启线程. 那么,一个好玩的问题就出现了:既然开启一个线程的步骤如此简单明了,

Java并发编程学习路线

一年前由于工作需要从微软技术栈入坑Java,并陆陆续续做了一个Java后台项目,目前在搞Scala+Java混合的后台开发,一直觉得并发编程是所有后台工程师的基本功,所以也学习了小一年Java的并发工具,对整体的并发理解乃至分布式都有一定的提高,所以想和大家分享一下. 我的学习路线 首先说说学习路线,我一开始是直接上手JCIP(Java Concurrency in Practice),发现不是很好懂,把握不了那本书的主线,所以思索着从国内的作者开始先,所以便读了下方腾飞的<Java并发编程的艺

学并发编程,透彻理解这三个核心是关键

写在前面 上一篇文章这次走进并发的世界,请不要错过 给大家带了并发编程的开胃菜,接下来我们逐步上正餐,在吃正餐之前,我还要引用那首诗词: 「横看成岭侧成峰,远近高低各不同」,远看看轮廓,近看看细节,不断切换思维或视角来学习 远看并发,并发编程可以抽象成三个核心问题: 分工.同步/协作.互斥 如果你已经工作了,那么你一定听说过或者正在应用敏捷开发模式来交付日常的工作任务,我们就用你熟悉的流程来解释这三个核心问题 分工 将当前 Sprint 的 Story 拆分成「合适」大小的 Task,并且安排给

超强图文|并发编程【等待/通知机制】就是这个feel~

你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough 现陆续将Demo代码和技术文章整理在一起 Github实践精选 ,方便大家阅读查看,本文同样收录在此,觉得不错,还请Star 并发编程为什么会有等待通知机制 上一篇文章说明了 Java并发死锁解决思路 , 解决死锁的思路之一就是 破坏请求和保持条件, 所有柜员都要通过唯一的账本管理员一次性拿到所有