文章 60
评论 133
浏览 295136
Go netpoll I/O 多路复用构建原生网络模型之源码深度解析

Go netpoll I/O 多路复用构建原生网络模型之源码深度解析

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

Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池

Goroutine 并发调度模型深度解析之手撸一个高性能 goroutine 池

并发(并行),一直以来都是一个编程语言里的核心主题之一,也是被开发者关注最多的话题;Go 语言作为一个出道以来就自带 『高并发』光环的富二代编程语言,它的并发(并行)编程肯定是值得开发者去探究的,而 Go 语言中的并发(并行)编程是经由 goroutine 实现的,goroutine 是 golang 最重要的特性之一,具有使用成本低、消耗资源低、能效高等特点,官方宣称原生 goroutine 并发成千上万不成问题,于是它也成为 Gopher 们经常使用的特性。 Goroutine 是优秀的,但不是完美的,在极大规模的高并发场景下,也可能会暴露出问题,什么问题呢?又有什么可选的解决方案?本文将通过 runtime 对 goroutine 的调度分析,帮助大家理解它的机理和发现一些内存和调度的原理和问题,并且基于此提出一种个人的解决方案 — 一个高性能的 Goroutine Pool。

字节跳动在 Go 网络库上的实践

字节跳动在 Go 网络库上的实践

本文选自“字节跳动基础架构实践”系列文章。 “字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础架构发展和演进过程中的实践经验与教训,与各位技术同学一起交流成长。 RPC 框架作为研发体系中重要的一环,承载了几乎所有的服务流量。本文将简单介绍字节跳动自研网络库 netpoll 的设计及实践;以及我们实际遇到的问题和解决思路,希望能为大家提供一些参考。

【译】Go 语言项目源码贡献官方指导文档

【译】Go 语言项目源码贡献官方指导文档

以前给 Go 语言项目源码提交过一些 commits,期间阅读他们的官方指导文档的时候觉得这篇指导文档可以作为绝佳的关于大型软件项目的规范管理的参考,因为最近又提交了几个 commits,就又把这篇文档再看了一遍,有感于 Go 团队在项目管理和工程实践上的一些宝贵经验,就把文档翻译成了中文;一来为了更加深入地理解 Go 语言团队的项目工程最佳实践,二来则是为了给其他有意给 Go 语言源码提交贡献的开发者提供一点参考。

最快的 Go 网络框架 gnet 来啦!

最快的 Go 网络框架 gnet 来啦!

gnet 发布正式的 v1 版本,附上权威的 TechEmpower 性能测试结果。

这可能是目前最透彻的Netty原理架构解析

这可能是目前最透彻的Netty原理架构解析

本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。

开发者福利:免费获取 JetBrains 全家桶

开发者福利:免费获取 JetBrains 全家桶

教你如何不花钱就使用 JetBrains 全系列的产品!

gnet: 一个轻量级且高性能的 Go 网络框架

gnet: 一个轻量级且高性能的 Go 网络框架

gnet 是一个基于 Event-Loop 事件驱动的高性能和轻量级网络库。这个库直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:libuv 和 libevent。 这个项目存在的价值是提供一个在网络包处理方面能和 Redis、Haproxy 这两个项目具有相近性能的 Go 语言网络服务器框架。 gnet 的亮点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的网络库。

两种方式迁移 Docker 的默认安装(存储)目录

两种方式迁移 Docker 的默认安装(存储)目录

前阵子我给自己的云服务器买了数据云盘挂载上去了,作为以后主要的存储那些占用磁盘比较大的数据,所以就想着把一些以前装在系统的根目录 / 下的一些软件的数据目录迁移到新的数据盘挂载的目录下,首先迁移的是 Docker,我的服务器系统发行版本是 Ubuntu-16.04。

我的书单

我的书单

整理了一份书单,有计算机领域的和我个人业余看过并且喜欢的书籍,和大家分享一下。

后会有期

后会有期

这是我在 2018 年 10 月份从腾讯离职时所写的一篇感悟文章,最早发表在个人公众号里,重新整理了一下发表在我的个人博客这里。

有哪些可称为「神作」的网络小说?

有哪些可称为「神作」的网络小说?

写了一个简单的爬虫,抓取了知乎问题:『有哪些可称为「神作」的网络小说?』下所有回答里提名的小说,并做了简单的统计,按去重的提名次数由高到低进行排序得到的完整列表,仅统计回答里带《》括起来的小说名,仅供参考。

申请友链

申请友链

如果有兴趣和本站交换友链的同学,请在这里留言。

我的开源项目

我的开源项目

我的开源项目一览。

Linux IO模式及 select、poll、epoll详解

Linux IO模式及 select、poll、epoll详解

注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。 一 概念说明 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x

星光未满,月色失约。