七、并发编程(高性能计算/数据中心/人机交互并发)

一、高性能计算中的并发编程

1、主要挑战

(1)计算任务如何分解

        计算图需要容易并行化

                机器-线程两级任务分解

        生产者-消费者解决一切问题

(2)线程如何通信

通信不仅发生在节点/线程之间,还发生在任何共享内存访问

二、数据中心里的并发编程

1、特点

(1)以数据存储为中心

        互联网搜索:Google、社交网络Facebook

        互联网应用:微信/QQ/支付宝/游戏

(2)算法/系统对HPC和数据中心的意义

        n多台服务器,一个算法可以快1%,可以省好多资源

2、主要挑战

多副本情况下的高可靠、低延迟访问

(1)在服务器海量的分布请求的前提之下

        数据要保持一致(Consistency)

        服务器时刻保持可用(Availability)

        容忍机器离线(Partition tolerance)

三、如何使用好一台计算机

1、如何使用一台计算机尽可能多的服务并行的请求

工具:

(1)线程(threads)

(2)协程(coroutines)

        多个可以保存/回复的执行流

        比线程更轻量(完全没有系统调用,也没有操作系统状态)

2、数据中心:协程和线程

        同一时间有数千/数万个请求到达服务器

        计算部分

                需要利用好多处理器

                        线程

                        协程-》一人出力,他人摸鱼

        IO部分

                会在系统调用上block(例如请求另一个服务器或都磁盘)

                        线程-》每个线程都占有客观的操作系统资源

                        协程-》一个干等,他人围观

3、Go和Goroutine

Goroutine:概念上是线程,实际是线程和协程的混合体

        每个CPU上有一个Go Worker,自由调度Goroutine

        执行到blocking API时(如sleep,read)

                成功-》立即继续执行

                失败-》立即yield到另一个需要CPU的Goroutine

四、浏览器中的并发(人机交互)

单线程+事件模式

一个线程、全局的事件队列、按序执行

耗时的API调用会立即返回

        条件满足时想队列里添加一个事件

好处:

        并发模型简单

                函数执行时原子的

        API依然可以并行 

                适合网页这种”大部分事件花在渲染和网络请求“的场景

坏处:

        Callback hell(祖传屎山)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值