FunCoder

FunCoder

Python多线程、进程debug技巧

  • 使用 py-spy
  • 利用 /proc/{pid}/ 中的信息

比如查看进程环境变量: cat /proc/{pid}/environ

查看实时进程内部线程的CPU和内存状态:py-spy --nonblocking -p {pid}

查看线程dump:py-spy dump --nonbloacking -p {pid}

Read more »

CSAPP 12 并发编程 (1)

一般来说,应用级别的并发主要由三种方式实现:

  • 进程
  • I/O多路复用
  • 线程

进程

进程是构建并发程序最简单和直接的方式,主要是通过fork, exec, waitpid等系统函数联合实现,而进程间是通过socket两端的文件标识符进行通讯。

Read more »

CSAPP 11 网络编程

网络编程基于之前看到的一些基本概念和抽象:进程、信号、内存映射、内存动态分配。

几乎所有的网络应用程序都基于服务器-客户端模式,即几个或者多个服务度进程和一个或者多个客户端进程,这些进程可以在同一个机器上,也可以分布在其他被网络连接的机器上。

计算机网络包含众多不同类型的机器,这些机器和设备是通过一些列“协议”进行交流的,每一个协议都包含两个基本部分:命名规则和传输规则。

TCP/IP协议

Read more »

CSAPP 10 系统IO

Unix系统中的IO,即Input和Output是指从“文件”读入数据到内存和从内存输出数据到“文件”。“文件”是Unix的一个抽象,即一串字节。在概念上所有IO设备都可以抽象成文件,比如网络、硬盘、各种外设等等。这样系统就可以统一接口来操作外设。

Unix系统提供了四个基本的IO API:

  • int open(char *filename, int flags, mode_t mode)
  • int close(int fd)
  • ssize_t read(int fd, void *buf, size_t n)
  • ssize_t write(int fd, void *buf, size_t n)

其实这四个api的道理非常简单,open会返回一个文件标识符,就是打开了一个内存和文件的通道,read就是把文件标识符指向的文件中的字节输入到buf指向的内存空间,而write刚好相反,把buf指向的内存空间的字节输入到文件中。

Read more »

CSAPP 9:虚拟内存

虚拟内存的三个重要功能:

  • 将物理内存作为一种缓存,缓存硬盘上的一个私有内存地址空间
  • 让每一个进程拥有独立的内存地址空间
  • 确保进程之间的内存不会互相影响

理解虚拟内存的关键在于意识到:一个数据对象(字节)可以有多个属性(地址)。话句话说,一个内存对象可以有两个地址,一个物理地址,一个虚拟内存地址。

虚拟内存:缓存

Read more »

信息爆炸,炸毁了我

最近发现了一个现象,我似乎没有办法坚持做一件事情很长时间了,而且这个“很长时间”变得原来越短了!

上一次我自发的坚持一件事情很长时间应该是考研。那已经是10年前的事情了,那时候我坚持每天去自习室学习超过6小时,持续了将近9个月时间,几乎没有间断过。再上一次可能是高考,算是坚持了三年学习,但那已经是13年前的事情了。

读博士以后,我集中精力做一件事情的能力就慢慢变弱了,那是大概6年前。比如做实验加写论文有时候可以到3个月左右。参加工作后,业余时间我还是想多学点东西或者做一些工作之外的事情,但是我渐渐发现我很难坚持了!开始的时候仅仅是不能坚持学完一门公开课(大概需要3个月左右),后面变成不能完整的阅读一本书(大概1个月左右),目前已经慢慢出现不能完整地读完一篇论文了(大概需要几天到1周时间)。更可怕的,我甚至难以完整的阅读一篇报道或者博客了(十几分钟到几小时),经常是读了一半就是去兴趣或者被其他信息拉走了。比如,我会在上网阅读书籍的时候,不定期的打开知乎、youtube、股票报价、微信等等,浏览一些信息,甚至有时候我会完全无目地滑动网页、切换窗口等等,然后回到我刚才在做的事情上,如此循环。到头来往往是时间过去了,什么都没得到。

短短十几年时间,我坚持做一件事情的能力从3年下降到了30分钟,甚至3分钟。(比如,你可以坚持读完这篇博客吗?)

Read more »

量子计算索引

公开课程

其他人整理的资源

Read more »

CSAPP 8 异常控制流(ECF)

异常控制流,Exception Control Flow,是操作系统实现IO、进程、虚拟内存、并发等等功能的的重要基础工具。

异常

这里提到的异常不是通常意义的异常,而是分成四类:Interrupt, faults, aborts, and trap.

进程

Read more »

Python3.10的新特性!

新版本的Python 3.10主要有三个大变化:

  • 增加模式匹配
  • 更好的错误提示
  • 更好的类型检查

结构化模式匹配

模式匹配主要通过mathccase关键字,具有如下实现方法:

Read more »

CSAPP 7 连接,Linking

连接是将程序的不同部分(指令和数据)组合成一个二进制文件,该文件可以被读入内存并被CPU执行。连接可以发生在编译时,即程序从源代码转换成机器码的过程中(Static Linking);也可以发生在装载阶段,即程序被读入内存的阶段(Dynamic Linking);甚至可以在运行时,即程序已经被读入内存且已经开始执行的时候。

连接器操作的对象被称为目标文件:Relocatable object file, Executable object file, Shared object file

目标文件的格式是约定俗成的,最常见的是ELF, Executable and Linkable Format。

在C语言中,static 关键字通常用来隐藏变量或者函数。

Read more »
0%