Dra-M Dra-M
首页
技术
冥思
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

莫小龙

保持理智,相信未来。
首页
技术
冥思
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
全部标签
Golang GMP epoll Gin 代码片段 Java转Go GitLab DevOps K8S 运维 NFS Nginx LDAP Docker Kuboard Jenkins Nexus Maven jenkins pipeline git maven docker Loki SkyWalking SpringCloud WebHook 微服务 kafka SpringDataJpa 工具 Excel POI Bash Gradle 摘录 Java Task 配置中心 Mybatis SpringBoot Swagger 函数式编程 Stream流 编程思想 面向对象 Github Oauth2 Gateway Elasticsearch rabbitMQ 注解扫描 转载 kotlin

Go netpoller 原生网络模型之源码全面揭秘

潘少 2023-05-06 技术Golang GolangGMPepoll

Go 基于 I/O multiplexing 和 goroutine scheduler 构建了一个简洁而高性能的原生网络模型(基于 Go 的 I/O 多路复用 netpoller ),提供了 goroutine-per-connection 这样简单的网络编程模式。在这种模式下,开发者使用的是同步的模式去编写异步的逻辑,极大地降低了开发者编写网络应用时的心智负担,且借助于 Go runtime scheduler 对 goroutines 的高效调度,这个原生网络模型不论从适用性还是性能上都足以满足绝大部分的应用场景。

然而,在工程性上能做到如此高的普适性和兼容性,最终暴露给开发者提供接口/模式如此简洁,其底层必然是基于非常复杂的封装,做了很多取舍,也有可能放弃了一些追求极致性能的设计和理念。事实上 Go netpoller 底层就是基于 epoll/kqueue/iocp 这些 I/O 多路复用技术来做封装的,最终暴露出 goroutine-per-connection 这样的极简的开发模式给使用者。

Go netpoller 在不同的操作系统,其底层使用的 I/O 多路复用技术也不一样,可以从 Go 源码目录结构和对应代码文件了解 Go 在不同平台下的网络 I/O 模式的实现。比如,在 Linux 系统下基于 epoll,freeBSD 系统下基于 kqueue,以及 Windows 系统下基于 iocp。

本文将基于 Linux 平台来解析 Go netpoller 之 I/O 多路复用的底层是如何基于 epoll 封装实现的,从源码层层推进,全面而深度地解析 Go netpoller 的设计理念和实现原理,以及 Go 是如何利用 netpoller 来构建它的原生网络模型的。主要涉及到的一些概念:I/O 模型、用户/内核空间、epoll、Linux 源码、goroutine scheduler 等等,我会尽量简单地讲解,如果有对相关概念不熟悉的同学,还是希望能提前熟悉一下。

阅读全文

Go中GMP有哪些状态?

小许code 2023-05-05 技术Golang GolangGMP

在GMP中各个元素在调度器的调度下其实有各种不同的状态转换,比如goroutine就定义了比如_Gidle、_Grunnable、_Grunning、_Gsyscall和_Gwaiting这些状态,在不同的场景中实现这些状态进行不同的转换。

阅读全文

Go什么时候发生阻塞?阻塞时,调度器会怎么做?

迹寒编程 2023-05-05 技术Golang GolangGMP

Golang 调度器 GMP 原理与调度全分析

Aceld(刘丹冰) 2023-05-05 技术Golang GolangGMP

该文章主要详细具体的介绍 Goroutine 调度器过程及原理,可以对 Go 调度器的详细调度过程有一个清晰的理解。

阅读全文

【代码片段】我使用的Gin中间处理器(自定义异常处理、日志打印、traceId、跨域配置)

莫小龙 2022-12-03 技术Golang GolangGin代码片段

【Java转Go】如何理解Go中的值类型、引用类型、nil

莫小龙 2022-12-03 技术Golang GolangJava转Go

Java的赋值和参数传递都是值拷贝,Golang也是如此。

阅读全文

【Java转Go】如何理解面向对象,怎么把Golang用成面向对象的样子

莫小龙 2022-12-02 技术Golang GolangJava转Go

面向对象就是封装、继承、多态。

阅读全文

GitLab私服+Go Modules踩坑经验(SSH自定义端口)

莫小龙 2022-08-31 技术Golang GolangGitLab

环境是GitLab私服,私有仓库,仅允许SSH拉取,自定义端口。

阅读全文

易混淆哲学用语释义

莫小龙 2022-04-13 冥思杂谈哲学

前言:搭建一套自有的围绕K8S的DevOps工具

莫小龙 2022-04-11 技术运维 DevOpsK8S运维

通过此系列你将会获得:

K8S集群、NFS服务器、storageClass、nginx、LDAP、LDAP管理面板、连接LDAP的Kuboard、连接LDAP的Jenkins、连接LDAP的Gitlab、连接LDAP的Neuxs、Docker私服。 涉及共享库、K8SAgent启动、GitPull、Maven打包、Docker构建推送到私服、部署到K8S的Jenkins Pipeline。

Loki无侵入的日志收集、无侵入的SkyWalkingJava服务链路追踪、SpringCloud+K8S集群内外联调方案。

Jenkins构建事件、GitLab推送事件、KubeEvnet,推送到飞书WebHook。

一个尽可能涵盖上述内容的架构图:

devopsk8s.png

阅读全文

上一页

下一页

全部标签
Golang GMP epoll Gin 代码片段 Java转Go GitLab DevOps K8S 运维 NFS Nginx LDAP Docker Kuboard Jenkins Nexus Maven jenkins pipeline git maven docker Loki SkyWalking SpringCloud WebHook 微服务 kafka SpringDataJpa 工具 Excel POI Bash Gradle 摘录 Java Task 配置中心 Mybatis SpringBoot Swagger 函数式编程 Stream流 编程思想 面向对象 Github Oauth2 Gateway Elasticsearch rabbitMQ 注解扫描 转载 kotlin
Theme by Vdoing | Copyright © 2019-2023 Dra-M | 冀ICP备2021002204号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式