Shi Hai's Blog

随遇而安

python局部变量内存地址释放疑问的分析

一、问题背景 遇到了一段代码,如下所示,第一眼的直觉是变量ins是一个局部变量,重复调用test()函数会反复创建新的实例ins。 import sys def test(): ins = object() print(id(ins)) while True: test() 但实际情况却是在进程运行期间局部变量ins的id一直没有发生改变。 14007692...

《代码大全》阅读随笔

五、软件构建中的设计 5.1 设计中的挑战 设计就是把需求分析和编码调试连在一起的活动。 5.1.1 设计是一个险恶的问题 学校的编程任务是从头到尾直线前进而设计的。而社会中的编程开发需求可能在反复变动。 瀑布模式和敏捷模式本质区别在于承认未来的需求是否会发生变化及发生变化的频率? 5.1.2 设计是一个无章法的过程 你很难判断设计何时算是“足够好”了,设计到什么细节才算够?又有多少设计可以...

异步编程学习

异步和同步相比能充分的利用好CPU资源。 一、Java语言 1.1 Future 通过继承Thread或者实现Runnable接口可以快速实现多线程,但是这种实现方式只有执行过程没有返回值。为了要让并发任务能返回结果就需要实现Callable和Future来实现。 import java.util.concurrent.ExecutorService; import java.util.co...

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的情况按需使用。 备注:代...