目标完成情况
- 牛客2道题 ---- 今天做了拼多多的笔试
- 第12章,并发编程,看一半。 ---- 这两天才看一半,摸鱼有点严重
- C++ primer看一点。
学习情况回顾
LeetCode473 火柴拼正方形 ---- 拼多多笔试第二题
每根火柴可能属于4条边中的一条,因此需要采用子集树的回溯法。在剪枝的时候,一个很重要的技巧是,从大到小遍历。
并发编程
实现并发的方式
- 多进程 ---- 每一个任务都fork一个新的进程,然后execve一个新的程序,然后waitpid回收进程资源。这种方式操作起来简单,易懂,但是效率低。
- 单进程下的IO多路复用 ---- 在一个进程中,通过select函数监听多个打开文件描述符,每当有文件描述符可以读的时候,就进入相应的逻辑来执行。这种方式效率高,但是编码复杂。Node.js、 Nginx等著名的现代服务器都是采用这种方式实现并发的。
- 以上二者结合: 多线程。现代操作系统提供一组API可以在一个进程中创建线程,实际上,在没有创建线程的时候,整个进程就是一个线程,创建线程之后,就分为主线程和对等线程,注意,被创建出来的线程与主线程(最开始的线程)是平等的。线程是内核进行调度的单位,因此利用线程可以很容易实现并发,另一方面,线程与线程之间可以共享进程的一些上下文例如打开文件表和代码和数据区,因此效率更高。当然,线程在切换的时候,也是有上下文的。因此,线程是多进程和I/O多路复用技术的中和,可以说兼具二者的优点(容易实现并发、减少切换开销)。
明日目标
- 牛客两道题,最好录个视频,这两天琢磨了录屏和剪辑软件。(2h)
- csapp不管怎样都要收尾,已经拖延很长时间了。(6h)
- C++侯捷的视频要看一节。(1h)