CSAPP 12 并发编程 2
CSAPP 12 并发编程 2
并发可以增加系统的吞吐量,充分利用多核性能,但是并发系统带来的复杂度也需要额外的注意,以免出现不容易debug的bug。
同步机制
并发执行的程序访问栈外共享内存,往往不是由一个CPU指令完成,而是一系列指令。这时,这一些列指令就形成了一个 critical section 。如果不对这些critical section进行处理,就会出现并发bug。
为了避免并发bug,Edsger Dijkstra 提出了 Semaphores ,即信号量来保护 critical section 的指令。Semaphore本质上是一个全局变量,类型为正整数,有两个对应的函数来操作Semaphore:P和V:
Python多线程、进程debug技巧
CSAPP 12 并发编程 1
CSAPP 11 网络编程
CSAPP 10 系统IO
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指向的内存空间的字节输入到文件中。
CSAPP 9 虚拟内存
信息爆炸,炸毁了我
信息爆炸,炸毁了我
最近发现了一个现象,我似乎没有办法坚持做一件事情很长时间了,而且这个“很长时间”变得原来越短了!
上一次我自发的坚持一件事情很长时间应该是考研。那已经是10年前的事情了,那时候我坚持每天去自习室学习超过6小时,持续了将近9个月时间,几乎没有间断过。再上一次可能是高考,算是坚持了三年学习,但那已经是13年前的事情了。
读博士以后,我集中精力做一件事情的能力就慢慢变弱了,那是大概6年前。比如做实验加写论文有时候可以到3个月左右。参加工作后,业余时间我还是想多学点东西或者做一些工作之外的事情,但是我渐渐发现我很难坚持了!开始的时候仅仅是不能坚持学完一门公开课(大概需要3个月左右),后面变成不能完整的阅读一本书(大概1个月左右),目前已经慢慢出现不能完整地读完一篇论文了(大概需要几天到1周时间)。更可怕的,我甚至难以完整的阅读一篇报道或者博客了(十几分钟到几小时),经常是读了一半就是去兴趣或者被其他信息拉走了。比如,我会在上网阅读书籍的时候,不定期的打开知乎、youtube、股票报价、微信等等,浏览一些信息,甚至有时候我会完全无目地滑动网页、切换窗口等等,然后回到我刚才在做的事情上,如此循环。到头来往往是时间过去了,什么都没得到。
短短十几年时间,我坚持做一件事情的能力从3年下降到了30分钟,甚至3分钟。(比如,你可以坚持读完这篇博客吗?)
量子计算索引
量子计算索引
公开课程
- Ph219/CS219 Quantum Computation (加州理工) by John Preskill (with video on Youtube)
- CS269Q Quantum Computer Programming (斯坦福) by Dan Boneh
- Phys481-681-CS483, Quantum Computation (康奈尔) by David Mermin
- PHYS771 Quantum Computing Since Democritus (University of Waterloo) by Scott Aaronson
- Introduction to Quantum Computing and Quantum Hardware by IBM (with video on Youtube)
- Introduction to Quantum Computing by Chris Ferrie
- 6.443/8.371/18.436 Quantum Information Science
- Quantum Information Science II, Part 1 - Quantum states, noise and error correction
其他人整理的资源