编译自 Custom JSON Marshalling in Go。 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:",omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中不包含这个值,而json:"-"可以直接不被JSON序列化,…
性能问题可以分为两种类型: On-CPU: 线程花费在CPU上的时间。 Off-CPU: 线程阻塞在I/O、锁、计时器、页交换等场景中的等待时间。 Off-CPU性能分析砖窑用来测量和研究off-CPU时间,所以它不同于CPU profiling只检查线程在CPU上的运行时间,而是专门研究阻塞的线程…
基于分区和副本集的相关知识,初步了解Kafka的数据存储、同步原理 Kafka基本架构 上图为Kafka的典型架构图,对于消息的生产以及消费逻辑不在本文的讨论范畴,主要就Broker的数据存储做以浅显的总结。首先解释一下常见的相关专业术语: Broker:消息中间件处理节点;每个Kafka服务节点称…
在过去,传统的网络编程模型是多线程模型,在主线程中开启一个网络监听,然后每次有一个客户端进行连接,就会单独开启一个线程来处理这个客户端请求。 然而,如果并发量比较大,服务端就会创建大量的线程,而且会有大量的线程阻塞在网络IO上,频繁的线程上下文切换会占用大量的cpu时间片,严重影响服务性能,而且大量…
TCP 我们如何区分一台电脑上的不同应用进程?就像我们区分人一样,不同的人给标识不同的名字,偶尔还会遇到重名的,在计算机上重名的现象就禁止发生的,不同的应用进程,区分它们的是不同的端口号,有人占了这个端口运行,就不允许别人使用这个端口,所以不管是UDP协议还是TCP协议中端口号都尤为重要,源端口和目…