操作系统原理

1.线程和进程的区别、应用场景应用场景。

  • 进程:进程在操作系统中可以独立运行,作为资源分配的基本单位。表示运行中的程序。
  • 线程:线程是进程中的一个实例,作为系统调度和分派的基本单位。是进程中的一段序列,能够完成进程中的一个功能。
  • 协程:一个线程可以有多个协程。协程在子程序内部是可中断的,转而执行别的子程序,然后到合适的时候再回来接着执行

根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;
线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

  • 互斥锁:互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒。
  • 读写锁:rwlock,分为读锁和写锁。处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。 注意:写锁会阻塞其它读写锁。当* 有一个线程获得写锁在写时,读锁也不能被其它线程获取;写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)。适用于读取数据的频率远远大于写数据的频率的场合
  • 自旋锁:spinlock,在任何时刻同样只能有一个线程访问对象。但是当获取锁操作失败时,不会进入睡眠,而是会在原地自旋,直到锁被释放。这样节省了线程从睡眠状态到被唤醒期间的消耗,在加锁时间短暂的环境下会极大的提高效率。但如果加锁时间过长,则会非常浪费CPU资
  • 条件锁:就是所谓的条件变量,某一个线程因为某个条件未满足时可以使用条件变量使该程序处于阻塞状态。一旦条件满足了,即可唤醒该线程(常和互斥锁配合使用)
    信号量。

1.多进程优点
·每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
·通过增加CPU,就可以容易扩充性能:
·可以尽量减少线程加锁解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系:
·每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大
2.多进程缺点
·逻辑控制复杂,需要和主程序交互;
·需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
·多进程调度开销比较大:
五.多线程
1.多线程的优点
·无需跨进程边界;
·程序逻辑和控制方式简单;
·所有线程可以直接共享内存和变量等;
·线程方式消耗的总资源比进程方式好;
2.多线程缺点
·每个线程与主程序共用地址空间,受限于2GB地址空间:
·线程之间的同步和加锁控制比较麻烦;
·一个线程的崩溃可能影响到整个程序的稳定性;
·到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设
定线程堆栈为2M,还达不到1500个线程总数;
·线程能齣够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU
在开发中,最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用
多线程+多CPU+轮询方式来解决问题。方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

什么是死锁?产生死锁的原因是什么?
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。死锁产生的原因可归结为两点:
1.竞争资源;
2.进程间推进顺序非法

并发和并行的主要区别在于事件发生的时间和处理方式:

  1. 并发:并发是指两个或多个事件在同一时间间隔发生,把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。并发侧重于在同一实体上,例如,在一台处理器上“同时”处理多个任务。在并发程序中,线程可能会交替地换入或者换出内存,每个线程都处于执行过程中的某个状态。
  2. 并行:并行是指两个或者多个事件在同一时刻发生,把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。并行侧重于在不同实体上,例如,在多台处理器上同时处理多个任务。
posted @ 2024-03-14 11:27  时光起名叫坚强  阅读(64)  评论(0)    收藏  举报