Shi Hai's Blog

随遇而安

python并发并行性能测试

python支持并发/并行的手段主要是asyncio、threading以及multiprocessing。 我的测试环境是4核虚拟机。 asyncio import asyncio import time async def count(number): result = sum(i * i for i in range(number)) return result...

非侵入式获取gcc编译选项

本文背景 由于需要对部门内以C语言服务进行编译参数排查,确保C语言构建项目配置了安全编译选项,如:-fPIC等。当然挨个去看构建工程可以很直观,但是服务太多,本人太懒,所以想看看是否有比较自动化的方式能从构建服务中直接获取各个服务的构建参数。因此,本文尝试寻找一种非侵入式代码方式即可获得各服务执行gcc编译所配置的参数。 技术方案探索 -frecord-gcc-switches 此参数是gc...

阅读书单推荐

不限于技术书籍,持续更新

一、社会科学 《毛泽东选集》:毛主席通过非常精确的调研数据对社会问题进行深度剖析和总结,擅长抓住事物的主要矛盾,非常擅长通过辩证法去看事物的本质。 《控制论与科学方法论》:从控制论和系统论角度来诠释社会的发展和进化,社会是一个自稳定系统,短期的波动只是向前演进的一个必不可少的一个小阶段,长期状态是稳定的。控制论中对客观事物的可能性空间定义在某种角度上可以和辩证方法论是可以对应上,通过辩证方...

gcc编译相关内容汇总

自己不懂的、容易忘记的都持续记录一下。

gcc -c 和 gcc -s -c:编译或者汇编,但是不链接,此编译产物一般用于构建静态文件。 -S:仅编译,不会汇编或者链接。 pthread/lpthread 在05年前,有各类不兼容的pthreads API实现,所以必须用lpthread来指定,但现在的操作系统就没有这个问题就可以使用pthread。 Xlinker 编译需要链接动/静态文件则需要此参数,等价于Wl。一个是-...

python print执行过程剖析

python print()函数在cpython内部的执行过程简单剖析梳理。

print()主要流程剖析 实际这个测试文件test.py就一行代码:print('Hello World!')。 print('Hello World!') 相关的字节码为: 1 0 LOAD_NAME 0 (print) 2 LOAD_CONST 0 ('Hello Worl...

bpo-37224 python子编译器资源竞争问题

cpython MR门禁中偶现的一个失败用例问题修复过程记录

问题背景介绍 这个问题是cpython项目门禁中发现的一个问题,具体的表现就是子编译器相关的两个用例(test_still_running, test_already_running,用例代码详情)会高概率出现失败,尤其是并行测试数量多于300时,基本在10小时内就能再次捕捉到相关错误。问题单详情 此问题可以用./python -m test test__xxsubinterpreters...

git repo的由来

工作中用到了git repo理念,考古一下相关历史迭代过程(此博客不介绍内部代码逻辑)。 背景介绍 aosp(android)开发涉及到数百个代码仓,为了降低数百个仓库的管理成本,Shawn Pearce在2008年开发了git repo工具(需要和gerrit配套使用)。但开发aosp是不是一定要掌握git repo? 答案为:不一定,可以根据developer的情况按需使用。 备注:代...

cpython编译过程分析

编译及执行的主要流程 decode过程分析 cpython在编译源码过程会先判断source code使用的编码方案,因为不同的编码方式意味着不同的解码过程。 我这里用一个demo来演示一下python是如何来判断编码方案。 # 我有一个fab算法文件存放于 /home/shihai/test_fab.py中,具体内容如下所示: def fab(max): n, a, b = 0,...

DevOps软件工程师行动指南

《DevOps软件工程师行动指南》里面的好理念。 第一章 DevOps是什么 1.DevOps是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间。 2.保证质量的手段主要有:部署前的测试验证,部分线上流量的灰度验证及运维监控。 3.DevOps是目标为导向的,需要关注实践的目标、所需的时间及质量。

How Google Tests Software

《How Google Tests Software》 Points 测试方法不当会扼杀一个本来有机会成功的商品或公司,至少拖慢这个产品的速度; 工程生产力(Engineering Productivity)团队:更加关注生产力,而不是测试和质量。测试和质量是开发过程里每个人都要承担的工作。这意味着开发人员负责测试,开发人员负责质量。生产力团队负责帮助开发团队搞定这两项任务(横跨开发和测...