如何读懂火焰图?

  • Post author:
  • Post category:IT
  • Post comments:0评论

软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。 火焰图(flame graph)是性能分析的利器。本文介绍它的基本用法。 一、perf 命令 让我们从 perf 命令(performance 的缩写)讲起,它是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)。 通常,它的执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。 $ sudo perf reco…

继续阅读如何读懂火焰图?

使用 RxTest 来建立基于 RxSwift 的自动化测试

  • Post author:
  • Post category:IT
  • Post comments:0评论

最近开始一个 iOS 新项目,我开始完全用 RxSwift 来构建所有逻辑了。本篇文章将讲述如何通过 RxTest 来架设起一个「响应式」的自动化测试环境。 我学习和使用 Rx 的经历 RxSwift(或 Reactive 响应式编程),我了解还算早,但是一直没有全面地采用它。一方面有项目的原因,经典项目因为忙着加 Feature,牵扯的地方比较多,所以只会谨慎局部使用,采用不多,比如奇点,只在一些和复杂网络请求有关的新特性上使用了它。另一方面,我虽然是一个追求新技术的人,但是也不想「有了锤子见…

继续阅读使用 RxTest 来建立基于 RxSwift 的自动化测试

使用 RxTest 来建立基于 RxSwift 的自动化测试

  • Post author:
  • Post category:IT
  • Post comments:0评论

最近开始一个 iOS 新项目,我开始完全用 RxSwift 来构建所有逻辑了。本篇文章将讲述如何通过 RxTest 来架设起一个「响应式」的自动化测试环境。 我学习和使用 Rx 的经历 RxSwift(或 Reactive 响应式编程),我了解还算早,但是一直没有全面地采用它。一方面有项目的原因,经典项目因为忙着加 Feature,牵扯的地方比较多,所以只会谨慎局部使用,采用不多,比如奇点,只在一些和复杂网络请求有关的新特性上使用了它。另一方面,我虽然是一个追求新技术的人,但是也不想「有了锤子见…

继续阅读使用 RxTest 来建立基于 RxSwift 的自动化测试

[译]使用 bcc/BPF 分析 go 程序

  • Post author:
  • Post category:IT
  • Post comments:0评论

BCC 是基于 BPF 的 Linux IO 分析、监控、网络工具集合。BPF Compiler Collection (BCC) 是创建高效内核追踪和处理程序的工具包,包含几个有用的工具和用例。BCC 扩展了 BPF (Berkeley Packet Filters) 的用途,BPF 之前被称为 eBPF,是 Linux 3.15 新增的一个新特性。BCC 大部分的功能都要求 Linux 4.1+。 本文翻译自性能分析大牛Brendan Gregg的 2017年中旬的一篇文章:Golang b…

继续阅读[译]使用 bcc/BPF 分析 go 程序

MySQL Alter Table锁表相关的....提纲?

  • Post author:
  • Post category:IT
  • Post comments:0评论

(瞅一眼才发现四个月没写了,确实是好久没写代码了,没啥心得,不过想想好像可以写个提纲凑个数) 我们的业务主要还是用 MySQL 存储业务数据。 MySQL 一个很麻烦的问题是,alter table 的时候往往要锁表,而业务在最初设计的时候,又没法为未来的所有改动预留合适的字段,结果就是,要么另外建一张表横向扩展,要么熬到半夜,忍受锁表带来的业务中断;不过在多次实践中还是有一些心得体会,可以简单列一下。 1. alter table 是否都会锁表? 不都会,有些情况可以不锁表,例如,修改默认值,…

继续阅读MySQL Alter Table锁表相关的....提纲?

Direct3D12 的接口设计 bug

  • Post author:
  • Post category:IT
  • Post comments:0评论

昨天被 D3D12 的一个 bug 坑了一晚上,这个问题很值得一写。 最初是发现LUID ID3D12Device::GetAdapterLuid()这个函数有问题。我用 mingw64 gcc 编译后的程序,只要调用了一个 api ,d3d12device 设备对象的虚函数表就被破坏掉了。下一次对这个设备的任何 api 调用都会 crash 掉。 由于这个函数的实现在 d3d12.dll 中,是没有源码的,所以只能用 gdb 调试了一下。发现了一个问题:这个 api 的返回值是 LUID ,它…

继续阅读Direct3D12 的接口设计 bug

你需要了解的 Swift 4 新东西之 Substring

  • Post author:
  • Post category:IT
  • Post comments:0评论

Swift 4 正式版已经随着 iOS 11 和 Xcode 9 的发布而发布了。 这是一个值得受好评的版本,很重要的一点是,它改变了 Swift 被人吐槽最多的一个问题:每个版本因为不兼容的问题,都要重写。Swift 4 有着 Swift 3 语法兼容模式,这意味着你不用改一行代码,就可以在 Xcode 编译通过。这对大型 iOS 项目而已非常重要:我们可以在未来的一年从一个 Target、一个 Framework 开始的形式慢慢地迁移至 Swift 4。 由于我比较急,一下子把自己的项目(奇…

继续阅读你需要了解的 Swift 4 新东西之 Substring

关于 iOS 11 GM 及正式版可能存在几个小问题

  • Post author:
  • Post category:IT
  • Post comments:0评论

还有几个小时,iOS 11 正式版就要发布了。而在前天,我却从 iOS 11 GM 降级回了 iOS 10。这是我用 iOS 系统七年以来,第一次因为 GM 用的不愉快而回到旧系统。这篇文章,我想谈谈对 iOS 11 的一些看法。 我是在 Apple 发布会结束后的那天,把自己的 iPhone 6s 更新到 iOS 11 GM 的。更新的形式用的是备份原手机,下载 iOS 11 GM 的 ROM,干净安装 iOS 11,再从备份中恢复。理论上是最干净和毛病少的方式,然而,五六天的的体验却让我失望…

继续阅读关于 iOS 11 GM 及正式版可能存在几个小问题