第二章 进程与线程
Tanenbaum将静态程序比喻为食谱,食材、厨具等比喻为计算机系统资源,人为CPU,进而将进程比喻为人照着食谱进行做饭的这一活动,这一比喻让我印象深刻,不仅彻底理解了进程,而且让我想到了能将生活中的很多事情联系到计算机中的概念。
还有字处理软件的多线程的使用,也使我对多线程的用法,以及线程的任务分配有了详细的认识,很多以前看课本不懂的地方,在这里都得到了很好的解释。
多线程的使用:
若多个线程都是CPU密集型的,那么并不能获得性能上的增强,但是如果存在着大量的计算和大量的I/O处理,拥有多个线程允许这些活动彼此重叠进行,从而会加快应用程序执行的速度。所以在网络编程、服务器开发中多线程的使用是基本功,必须熟练掌握。
线程分为用户级线程和内核级线程,
用户级线程有更好的性能,但是最大的问题是如何实现阻塞系统调用
使程序进入忙等待的锁称为自旋锁
什么是忙等待?程序不断查询某个值,
忙等待和阻塞的区别:阻塞是使进程失去CPU处理时间,等待事件发生
实现P,V操作的是系统调用和原子操作
死锁:
一组线程被阻塞,等待一个永远不会发生的事件时,就会产生死锁