golang源码学习之RWMutex

读写锁(RWMutex)是在互斥锁(Mutex)的基础上构建的。Mutex笔记见另一篇 那么为什么需要读写锁呢?试想一下,在读多写少的场景下,mutex只允许一个goroutine进行读操作,而读操作往往是不会修改目标数据的。那我们为什么不允许多个goroutine并发执行读操作以提高效率呢,所以就有了读写锁。读锁和写锁互斥,但读锁和读锁不互斥。 下面是读锁和写锁的兼容性,是不是很像innoDB的排他锁和共享锁呢 . rlock lock rlock v x lock x x 数据结构 type...阅读全文

比 Nginx 更好用的 web 服务器:Caddy

双 11 薅了一下阿里云的羊毛 ,新vps用新工具武装下 。 What is Caddy Caddy 首先是一个用Go实现的Web Server。 在追求性能的道路上,nginx已经一骑绝尘。这种情况下诞生的 Gaddy有什么特性呢? Caddy的作者Matt Holt有这样的理念: 其他Web Server为Web而设计,Caddy为human设计。可以看出Caddy主打易用性,使用配置简单。得益于Go的跨平台特性,Caddy很容易的支持了三大主流系统:Windows、 Linux、Mac。 ...阅读全文

简书 2019-11-12 00:34:43

分享一个让我进入阿里中间件的个人项目

作者: vangoleo 官网: www.vangoleo.com/iris-java/ 背景 时光荏苒,进入阿里中间件团队已经快两年时间了。这期间,有幸参与了第四届中间件性能挑战赛的题目组,筹备了以“Dubbo Mesh”为主题的初赛题;和团队一起开展了Dubbo线下meetup活动;将阿里多年双11积累的中间件基础设施最佳实践和方法论,通过阿里云的商业化产品,为广大开发者和企业提供服务。很庆幸能有这样一段难忘的经历。回想起来,能进入中间件团队,和我当初的一个Github项目还有关系。今天把该...阅读全文

掘金 2019年11月11日 vangoleo

Blog.8 runtime中P的理解

P是在Go1.1引入的概念,初始默认等于CPU核的数量。P只是一个逻辑概念,跟CPU也没有任何关系。 源码go/1.13.4/libexec/src/runtime/proc.go中对P的注释如下: // P - processor, a resource that is required to execute Go code. // M must have an associated P to execute Go code, however it can be // blocked or i...阅读全文

Segmentfault 2019-11-12 08:33:05 渐行渐远

激光切割机排版软件

激光切割机排版软件【电同微I7I54833762】try/catch基本上是大家最常和async/await的,基本上我们会用它去包围大部分的异步方法。await关键字后面的promise一旦reject了,就会抛出一个异常错误。run();asyncfunctionrun(){try{awaitPromise.ject(newError('Oops!')); }catch(err) {console.error(error.message); }}复制代码try/catch同样也可以处理同步的...阅读全文

Gin实现依赖注入

[原文地址](https://bingjian-zhu.github.io/2019/11/06/Gin%E5%AE%9E%E7%8E%B0%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5/) ### 前言 依赖注入的好处和特点这里不讲述了,本篇文章主要介绍gin框架如何实现依赖注入,将项目解耦。 ### 项目结构 <pre><code> ├── cmd 程序入口 ├── common 通用模块代码 ├── config ...阅读全文

Go语言中文网 2019-11-11 20:21:46 939496716

面向接口 - day 3

type Traversal interface { Traverse() } func main() { traversal := getTraversal() traversal.Traverse() } duck typing 描述事物的外部行为而非内部结构 golang类似duck typing golang中接口是由使用者定义的 实现者只需要实现接口的方法就可以 接口的内部实现 接口中包含实现者的类型和实现者的值/实现者的指针 将实现者赋值给接口变量时有两种方式:值赋值和指针赋值 值赋...阅读全文

使用 Go 添加文档

简介 swagger 起步 编写文档 运行 总结 当前部分的代码 简介 对于 API 服务来说, 文档是必不可少的. 然而文档却挺烦人的, 尤其是同步更新的问题. 如果选择手写文档, 经常会忘了更新文档; 或者处于高速开发的前期, 来不及更新文档. 现在更推崇的方式是文档即注释, 就是将文档作为注释, 和代码同步更新, 使用自动生成文档的方式实时更新. 另一种概念是文档即测试, 让文档不但能看, 也能用, 这对于 API 文档来说, 是一个巨大的便利. 有了它, 再也不用一边看文档, 一边开着 ...阅读全文

掘金 2019年11月10日 帅气猫咪

难学的十大编程语言,C++位居第二,它才是第一名!

编程语言是开发者们代码工作的核心,也是许多开发者最爱讨论的话题。编程语言的选择对开发者和工具制造商都十分重要,前者需要保持最新和具备市场潜力的技能,后者则亟需确保他们能够提供最有用的 SDK。开发者经济分析公司 SlashData 曾发布了《 2018 年第 2 季度各国开发者状况》调查报告,共有 167 个国家的 20500 多名开发者参与其中。报告面向全球所有类型的程序员,对使用每种主要编程语言的活跃开发者数量进行了最新的估计。其中,JavaScript 仍是最流行的编程语言,Python ...阅读全文

2019-11-11 FUSION开源社区招募进展以及任务进展

开源社区最新进展!!!在此很高兴向大家报告:1.FUSION「超能力者」招募计划取得巨大的进展,截止今日共收到来自全球的417位「超能力者」申请!2.开源社区发布的五项任务中,已有三项任务被社区成员自发认领!3.发布一个新任务:征集Time-lock相关文章!开源社区奖励发放情况截至今日,开源社区共为250位「超能力者」发放了奖励,总计625600个FSN(时间锁定三个月)。其中, 11月5日完成的第四批奖励发放情况如下:131人,共计310800个FSN(时间锁定三个月)。 其余未完成全部注册...阅读全文

Zinx --基于Golang的轻量级并发服务器框架

Zinx 是一个基于Golang的轻量级并发服务器框架 说明:目前zinx已经在很多企业进行开发使用,具体使用领域包括:后端模块的消息中转、长链接游戏服务器、Web框架中的消息处理插件等。zinx的定位是代码简洁,让更多的开发者迅速的了解框架的内脏细节并且可以快速基于zinx DIY一款适合自己企业场景的模块。 开发者 刘丹冰(@aceld) 张超(@zhngcho) zinx(C++版本) 开发者 刘洋(@marklion) Github Git: github.com/aceld/zinx ...阅读全文

掘金 2019年11月11日 aceld

内推 | 大厂需要什么样的人才?看看这些JD就知道啦

还在等 “金三银四” 吗?别等啦,好职位现在就来啦。霍格沃兹测试学院最近收到一些不错的内推岗位,将会持续公布给大家,先来看看第一批职位吧。 4352364532.JPG 1 腾讯-高级测试开发工程师(深圳) 薪资范围:视能力而定,上不封顶 岗位职责: 负责腾讯核心社交产品(APP/WEB/PC)的质量保障和效能提升,承担对应的devops工具链建设并推动落地。 岗位要求: 1、本科及以上学历,计算机或相关专业,具备扎实的计算机和软件技术基础。 2、 2年及以上开发 或者 测试开发 工作经验,至少...阅读全文

简书 2019-11-11 14:02:49

深度解密Go语言之pprof

相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致。 一般我们使用二分法,或者牛顿迭代法计算一个浮点数的平方根。但在这个函数里,作者使用了一个“魔数”,根本没有迭代,两步就直接算出了平方根。令人叹为观止! 因为它是最底层的函数,而游戏里涉及到大量的这种运算,使得在运算资源极其紧张的 DOS 时代,游戏也可以流畅地运行。这就是性能优化的魅力! 工作中,当业务量比较小的时候,用的机器也少,体...阅读全文

Segmentfault 2019-11-12 08:33:05 Stefno

比原链CEO朗豫:重金启动MOV生态建设,这会是第一个分布式区块链商业生态

11月8日,由巴比特主办的2019世界区块链大会·乌镇在乌镇互联网国际会展中心正式开幕。在比原链“Keep MOVing”专场活动上,比原链CEO朗豫做了主题分享。 以下内容来自朗豫分享,经巴比特整理。 朗豫 稳定运行2年,主、侧、跨发展方向破解不可能三角难题 2018年底、2019年初时,我们讲稳定、安全和繁荣。 我们都实现了。目前,比原链已无故障运行近2年,侧链也已平稳运行3个半月。没有稳定的系统就不可能有稳定的应用。去年,我们的算力摆脱了GPU的影响进入平稳发展阶段,钱包客户端也没有出现资...阅读全文

简书 2019-11-11 09:33:37 更多精彩内容POW的比原链为何 等

gRPC在安卓(java版本)的可行性实验

最近在调研网络通信框架,libp2p跟gRPC。公司之前用的是libp2p, 但是这个框架是针对p2p 网络的,最近才从IPFS分离出来的子项目,比较新,功能还在完善中,并且功能比较全。公司项目并没有用到这么多的功能,并且担心后续维护起来成本会比较高,所以就想找替代方案。 gRPC目前看来是一个比较流行的通信框架。这几天分析了服务注册、通信、交互等流程(后续会有相关的文章)。因为后续需要支持移动端的开发,从gRPC的文档来看,已经能够支持Android(Java 跟 kotlin)、IOS(Ob...阅读全文

简书 2019-11-11 02:33:01 更多精彩内容grpc应用详解与 等

听起来像“空气币”的【Skycoin】

文/韩大楠 写在前面我看了好些有关 Skycoin 的介绍,百度来百度去的,这个网站看看这个介绍,那个网站看看评论,我承认我有点墨迹了,毕竟这玩意儿涉及钱,我都 800% 谨慎,也更要理性占据感性的去研究各种币。我的「了解币」系列,除了 BTC、 FTN 、 KEY 、Ripple 、USDT ,这应该是我写币系列的第三篇。如下的内容,希望对你有用。初识 SkycoinSkycoin 这个币,我一看,哎妈呀,你是空气币么?好吧,其实它不是的。当时我还特意找胡同叔与区块链了解了这个币,他说是老币种...阅读全文

简书 2019-11-11 02:33:00 更多精彩内容(记录)Skyco 等

linux学习--week17--nginx-lnmp

负载均衡 2.1 负载均衡与反向代理区别 2.2nginx 7层负载 2.3 nginx 7层负载 2.4 nginx 4层负载均衡 nginx缓存 lnmp 4.1 概述 4.2 环境准备 LNMP环境迁移 5.1 数据库迁移 5.2 用户上传文件到nfs 5.3 回顾及今日内容: nginx 老男孩教育-Linux学院 web服务 负载均衡(反向代理) wireshark抓包 nginx缓存 web服务 部署:yum 编译(增加第3方模块rtmp ) 配置:nginx.conf conf.d...阅读全文

简书 2019-11-11 02:32:59 更多精彩内容Linux运维da 等

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

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

Go语言中文网 2019-11-10 22:37:34 panjf200

SOFAMosn 如何提高 GoLang 的转发性能

通过SOFAMosn了解goroutine只能在一定并发量级上降低并发编程的难度(goroutine内存占用2kb+)。 高并发的场景还是NIO比较适合。 GoLang 的转发性能比起 C++ 肯定是稍有逊色的,为了尽可能的提高 MOSN 的转发性能,我们在线程模型上进行优化,当前 MOSN 支持两种线程模型,用户可根据场景选择开启适用的模型。 模型一 如下图所示,使用 GoLang 默认的 epoll 机制,对每个连接分配独立的读写协程进行阻塞读写操作,proxy 层做转发时,使用常驻 wor...阅读全文

掘金 2019年11月09日 衣舞晨风