操作系统学习笔记

进程线程区别
进程线程调度切换开销
进程和线程都是用于实现多任务的方式,但它们之间有很大的区别。

进程是程序执行过程中的一个实例,是操作系统进行资源分配的基本单位。每个进程都有自己的地址空间、内存、数据栈等,进程之间互相独立,彼此之间不能直接访问。可以说,进程是操作系统中的一个独立的个体,它拥有自己的生命周期,包括创建、运行和销毁。

线程是进程中的一个执行单元,是操作系统进行调度的最小单位。每个线程都运行在进程的上下文中,共享进程中的资源,包括地址空间、内存、数据栈等。线程之间可以共享数据,彼此之间可以直接访问。可以说,线程是进程中的一个工作单元,它共享进程的资源,但是拥有自己的执行路径和状态。

进程和线程在调度和切换开销方面也有很大的区别。由于每个进程都有自己的地址空间和资源,所以进程之间的切换需要保存和恢复大量的状态信息,因此进程的切换开销较大。而线程之间共享进程的资源,所以切换的开销比进程要小很多。此外,线程的创建和销毁也比进程要快很多,因为线程只需要创建和销毁线程栈和一些必要的数据结构,而不需要像进程那样创建和销毁整个进程空间。

总的来说,进程和线程虽然都用于实现多任务,但是进程和线程之间有很大的区别,包括资源分配、数据共享、调度和切换等方面的区别。对于不同的应用场景,我们需要选择不同的并发模型来实现。

多进程适用于计算密集型的场景,多线程适用于 I/O 密集型的场景。当然,在实际应用中,我们也可以使用多进程和多线程的组合来实现更好的效果,比如使用多进程+多线程的方式,或者使用多线程+协程的方式。

 

协程(Coroutine)是一种比线程更轻量级的并发编程方式,它可以在单线程中实现并发的效果,并且可以避免线程切换的开销,从而提高程序的运行效率。

协程是一种用户态的线程,它是由用户程序自己控制的,而不是由操作系统控制。协程之间可以共享数据,彼此之间可以直接访问,不需要像线程之间那样进行加锁和解锁操作。协程的调度和切换是由用户程序自己实现的,通常可以使用生成器或 async/await 关键字来实现。

协程的主要优点包括:

  • 轻量级:协程比线程更轻量级,可以在单线程中实现并发的效果,减少线程切换的开销,提高程序的运行效率。
  • 高效性:由于协程之间共享数据,因此不需要像线程那样进行加锁和解锁操作,可以提高程序的运行效率。
  • 灵活性:协程可以根据需要随时暂停和恢复,可以自由地控制程序的执行流程,适用于很多复杂的应用场景。

协程的缺点主要在于:

  • 需要手动控制:协程需要用户程序自己控制调度和切换,因此需要一定的编程技巧和经验。
  • 难以调试:由于协程的执行流程比较复杂,因此在调试时比较困难,需要使用一些高级工具和技术。

总的来说,协程是一种比线程更轻量级的并发编程方式,可以在一些复杂的应用场景中发挥重要的作用,但是需要一定的编程技巧和经验,并且在调试时比较困难。

调度算法是操作系统中实现进程或线程调度的一种算法,它决定了系统如何选择下一个进程或线程执行。调度算法的主要目的是提高系统的资源利用率、响应时间、吞吐量等性能指标,同时也需要保证公平性、可靠性、可预测性等。

常见的调度算法包括以下几种:

  1. 先来先服务调度算法(FCFS):按照进程到达的先后顺序进行调度,先到达的进程先执行。优点是简单、公平,但是容易造成短作业等待长作业的情况,从而影响系统的响应时间。

  2. 最短作业优先调度算法(SJF):按照进程需要执行的时间长度进行调度,执行时间短的进程先执行。优点是可以最大限度地减少平均等待时间,但是需要预测进程的执行时间,容易受到长作业的影响。

  3. 优先级调度算法:为每个进程赋予一个优先级,按照优先级高低进行调度。优点是可以满足不同进程的不同需求,但是容易造成优先级倒挂、饥饿等问题。

  4. 时间片轮转调度算法(RR):将 CPU 时间分成多个时间片,每个进程轮流使用一个时间片,如果在时间片内没有执行完毕,则将进程挂起,等待下一轮调度。优点是可以保证公平性,但是需要选择合适的时间片长度,过长会降低响应时间,过短会增加上下文切换的开销。

  5. 多级反馈队列调度算法:将进程分成多个队列,每个队列有不同的优先级和时间片长度,进程根据自身的属性被分配到相应的队列中。优点是可以根据不同进程的属性分配不同的调度策略,但是需要合理设置多级队列的属性。

以上是常见的几种调度算法,不同的调度算法适用于不同的应用场景,需要根据具体情况选择合适的算法

posted @ 2023-06-24 10:21  小龙虾爱大龙虾  阅读(31)  评论(0)    收藏  举报