首页
学习
活动
专区
工具
TVP
发布

数据小冰

专栏成员
143
文章
67304
阅读量
28
订阅数
WebSocket协议-源码分析
本文是WebSocket系列文章的第3篇,从源码角度理解WebSocket是如何实现的。分析的是gorilla websocket,即WebSocket协议-实战中服务端使用的WebSocket库。
数据小冰
2024-07-04
350
利用continue label简化逻辑
在Go语言中,continue语句可以标签一起使用,continue label在处理复杂的嵌套循环时非常有用,可以让代码变得更简洁。
数据小冰
2024-07-04
140
WebSocket协议-实战
本文是WebSocket系列文章的第2篇,第1篇主要讲述概念原理。本文从实战角度介绍如何使用WebSocket。
数据小冰
2024-06-19
1120
WebSocket协议-概念原理
WebSocket与HTTP不是同一种协议,虽然两者都位于OSI模型的应用层,并且都依赖底层的TCP协议。它们有着各自的协议格式,应用不同的场景。WebSocket协议本身不依赖于HTTP协议,但是在WebSocket最初的建立阶段依赖于HTTP,因为在WebSocket的握手过程使用了HTTP请求来升级协议。
数据小冰
2024-05-13
4310
redis SDS设计与实现分析
本系列文章从源码角度分析redis的设计与实现,分析的源码为最新版本7.2.4。下载地址(https://github.com/redis/redis/tree/7.2.4)。
数据小冰
2024-03-22
1270
Go语言中常见100问题-#100 Not understanding the impacts of running Go ..
2021年Go开发者调查(https://go.dev/blog/survey2021-results)表明,用Go编写服务是最常见的用法,见下图。与此同时,Kubernetes是部署这些服务最广泛使用的平台。
数据小冰
2024-02-23
1250
Go语言中常见100问题-#99 Not understanding how the GC works
垃圾回收♻️(GC)是Go语言关键特性,帮助开发人员大大减轻心智负担。我们知道内存有栈和堆区之分,栈内存无需手动释放,但是堆内存需要我们手动释放。在Go语言中,GC会跟踪和释放不再使用的堆内存,每个Gopher都应该了解其工作原理,这非常有助于我们对程序进行优化。
数据小冰
2024-02-23
1500
Go语言中常见100问题-#98 Not using Go diagnostics tooling
Go语言提供了一些优秀的分析工具,可以帮助我们定位程序的性能问题。本文关注最关键的两个工具:pprof和trace。pprof和trace都是Go语言自带的性能分析工具,pprof可以采集内存分配、goroutine等信息,使用trace可以分析并发、阻塞事件以及GC情况。
数据小冰
2024-02-23
1750
Go语言中常见100问题-#97 Not relying on inlining
内联是指用函数体内容替换函数调用。内联过程是由编译器自动完成的,了解内联的基本原理有助于我们对一些场景下的代码进行优化。
数据小冰
2024-02-01
1290
Go语言中常见100问题-#96 Not knowing how to reduce allocations
减少内存分配是Go应用程序的一个常见优化事项。本系列文章已介绍了不少减少堆上内存分配的方法:
数据小冰
2024-02-01
1090
Go语言中常见100问题-#95 Not understanding stack vs. heap
在Go语言中,变量可以分配在栈上,也可以分配在堆上。栈内存和堆内存有着本质不同,会对数据密集型应用产生重大影响。本文主要讨论编译器将一个变量分配到栈上还是堆上规则。
数据小冰
2024-01-22
1060
Go语言中常见100问题-#94 Not being aware of data alignment
数据对齐是指数据在内存中的分配方式。规则的内存分配可以加速CPU访问内存速度。如果不了解数据对齐,会导致编写的程序消耗额外的内存,并且程序性能低下。
数据小冰
2024-01-10
1030
Go语言中常见100问题-#93 Not taking into account instruction-level ...
指令级别并行也是严重影响程序性能的一个原因。在理解什么是指令级并行之前,先来看一个具体的例子,并分析如何优化它。下面的函数接收一个长度为2的int64类型数组,函数内部将迭代一定次数,在每轮迭代时,执行如下操作:
数据小冰
2024-01-02
1070
Go语言中常见100问题-#92 Writing concurrent code that leads to false ...
在Go语言中常见100问题-#91 Not understanding CPU caches中讨论了缓存基本概念,可以看到一些特定的缓存(通常是 L1 和 L2)并不在所有逻辑内核之间共享,而是属于一个特定物理内核。这种特殊性会产生一些影响,比如并发时伪共享,这会导致性能显著下降。下面通过一个具体例子来说明什么是伪共享,以及如何预防这种情况发生。
数据小冰
2023-12-13
1490
Go语言中常见100问题-#91 Not understanding CPU caches
机械同理心(mechanical sympathy)是三届F1世界冠军杰基·斯图尔特 (Jackie Stewart) 创造的一个术语。
数据小冰
2023-11-29
1740
Go语言中常见100问题-#90 Not exploring all the Go testing features
单元测试是每个开发人员必须掌握的开发技能,Go语言特别注重单元测试,所以每个Gopher需要知道如何进行单元测试,使用什么参数控制测试效果,提升我们编写的代码质量,本文讨论相关单测技巧。
数据小冰
2023-09-10
1940
Go语言中常见100问题-#89 Writing inaccurate benchmarks
我们不要猜测程序性能,在对代码进行优化的时候,可能会有很多因素发挥作用,所以需要综合考虑,进行测试验证准没错。然而,编写benchmark并不是一件简单的事情,很容易因编写错误的benchmark导致做出不正确优化。本章节将列举一系列非正确编写benchmark问题点。
数据小冰
2023-08-17
2270
Go语言中常见100问题-#88-2 the iotest package
iotest包 https://pkg.go.dev/testing/iotest 提供了测试 readers和writers 函数集合。很多Gopher不知道有这个包,本文讲如何使用该包,方便我们编写测试代码。
数据小冰
2023-08-17
1720
Go语言中常见100问题-#41 substrings and memory leaks
在Go语言中常见100问题-#26 slices and memory leaks讨论切片可能导致的内存泄露问题,其实对于字符串也可能会导致内存泄露。下面来分析在操作字符串的时候如何防止内存泄露。
数据小冰
2023-08-17
1760
Go语言中常见100问题-#40 Useless string conversions
当编码操作的类型既可以是 []byte 又可以是 string时,大多数程序员倾向使用string类型,因为这样可能更方便。但是大多数的 I/O 操作采用的类型是 []byte。例如 io.Reader、io.Writer 和 io.ReadAll. 如果拿到的类型是string,但又要使用这些接口意味着需要进行类型转换,strings包提供了相关的转换函数。
数据小冰
2023-08-17
1110
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档