美文网首页
Go语言爱好者周刊笔记-Half-Sync/Half-Async

Go语言爱好者周刊笔记-Half-Sync/Half-Async

作者: 路人爱早茶 | 来源:发表于2020-04-26 20:13 被阅读0次

半同步/半异步(half-sync/half-async)

此模式集成同步io和异步io模式,即简化并发系统开发又兼顾效率。高级任务使用同步模型,底层使用异步io,提高效率简化逻辑,此设计模式广泛用在操作系统实现,如unix,windows等

模式介绍

模式动机是从异步io操作中解耦出同步io操作

如下图是BSD UNIX是网络系统架构图,内核协调异步通信设备(网络适配器和终端)和操作系统上运行程序之间i/o。到达通讯设备包通过硬件中断异步化的中断处理器传送操作系统内核handler接受来自设备包后嫁给更高一层协议判断(ip,tcp)合法数据存在网络成队列等待处理


image.png

操作系统dispatch用户进程消费数据,用户进程调用read系统
同步从网络层读数据,如果无可用数据进程sleep知道有新数据来。

bsd架构,设备中断信号,内核异步执行io操作,用户进程同步执行


image.png

出现如下场景需要考虑使用模式

系统需要异步处理外部事件
为每个外部事件制定单独控制线程执行io是低效的
同步io可以简化系统中高级任务

实际案例

go中消息库就是这个模式来实现
为了高效处理地底层网络io,go采用多路复用(linux epoll/windows iocp/freebsd,darwin kqueue/solaris Event Port)处理网络iO事件,并提供一致ent.conn对象实现同步调用.
如何在go中实现epoll方式处理网络io,本身go将这些异步事件分装在底层,代码无法调用,一般情况如此已经很高效
runtime/netpoll.go中定义了一个通用poll接口,针对不同操作系统有不同文件实现
runtime/proc.go是go调度器核心,他会调度使用netpoll的goroutine
net/fd_unix,中定义netfd是go网络库核心,基本类似于active object模式的proxy,对调用者来说提供同步方法,内部使用统一poll模型实现多路复用.

// TODO有些云里雾里,待深化.

相关文章

  • Go语言爱好者周刊笔记-Half-Sync/Half-Async

    半同步/半异步(half-sync/half-async) 此模式集成同步io和异步io模式,即简化并发系统开发又...

  • Go语言爱好者周刊笔记

    1.国内下载前缀 2.golang泛型待当前无,可用interface替代3.golang历史

  • Go语言爱好者周刊笔记-tcpserver & graceful

    什么是框架 把变化交给用户,把不变留给自己,面向接口编程 案例 tcpsever实现 监听类型 监听地址 客户端连...

  • Go语言爱好者周刊笔记-接口与反射关系

    [图片上传中...(image-961710-1587039097333)] 接口是抽象基本工具 接口在分配值时候...

  • 笨办法学golang(三)

    这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布...

  • 笨办法学golang(二)

    这是Go语言学习笔记的第二篇文章。 Go语言学习笔记参考书籍「Go语言编程」、Go官方标准库 前文提要 上篇文章中...

  • 笨办法学golang(四)

    这是Go语言学习笔记的第四篇 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 数组 数组是指一系列同类...

  • Go 语言极速入门

    本系列文章主要是记录《Go 语言实战》和《Google 资深工程师深度讲解 Go 语言》的学习笔记。 Go 语言极...

  • Golang Context

    参考Go语言实战笔记(二十)| Go ContextGolang context初探 一、WaitGroup 这是...

  • Golang相关电子书

    Golang相关电子书,会不定期更新 Go语言程序设计 Go语言学习笔记.雨痕(详细书签) Go语言·云动力(云计...

网友评论

      本文标题:Go语言爱好者周刊笔记-Half-Sync/Half-Async

      本文链接:https://www.haomeiwen.com/subject/amnwihtx.html