1:进程的上下文切换
进程的上下文切换是指:当A进程要切换到B进程中的时候, 先保存A进程的上下文(例如A进
程的入口等),然后将B进程的上下文加载到寄存器中,这个过程就是进程的上下文切换。
操作胸痛在管理CPU的时候,才引出的多进程的概念
- 线程和进程之间的关系
每个进程用于自己独立的代码段,数据段和堆栈段; 线程通常是一个轻型的进程,它包含独立的栈和CPU
的寄存状态;线程是进程的一个执行路径。同一进程所产生的线程共享内存空间;操作系统上,冲进程演化
出线程的主要目的是:更让好的支持多处理器,并且减少进程的上下文切换的开销;
- 进程池:
进程池就是创建一个池子,用于存放进程,当由任务来的时候,从池子中取出进程来执行任务,当执行结束
后,并不销毁进程,而是放回进程池中等待下一次的任务来临。
- 线程池:
开发一个服务器程序,每过来一个客户端,都创建一个新线程。但是客户端特别多,创建的线程会造成崩
溃。
防止在程序运行过程中,创建代码可能会出现的错误,造成程序崩溃;
线程池:把一堆线程放在一起同一管理。在程序启动时,我们一次性创建一定数量的线程。
线程根据其调用的等级可分为用户级和内核级:
用户级线程:主要用于上下文切换的问题;其调度过程有用户实现;
内核级线程:有内核调度机制实现;用户级线程要绑定内核级线程来运行;
用户使用的用户级的线程都要绑定内核级的线程;
总结:
进程是操作系统分配资源的最小单元,而线程是执行的最小单元。在一个程序执行中会有有很多的执行不
走,为了提高程序的执行效率,系统会自动的为程序分配多个线程(因为为每一步分配一个进程会占用很多的
系统资源,所以操作系统发展到今天,使用了线程代替了进程,在轻量级的工作中),每个进程中的多个线程
共享进程中的内存等资源。但是线程在执行的时候,并不是并行的,而是并发的。首先在系统中,每个进程
抢夺CPU的时间片。然后该进程中的线程再去抢夺该进程的时间片,然后线程轮流执行。互斥锁问题是:对
于不同的线程,共享同一进程的内存空间。对于多核的CPU可能会两个线程同时抢到时间片,同时执行同一
内存空间,导致错误。或者在单核CPU下,当一个线程把某一内存的数据读取到寄存器中之后,进行上下文
切换,然后其他线程获取CPU时间片后,操作了该内存。然后第一个线程切换回来,再把寄存器中的数据拷
贝回内存中,就会导致数据出错。(因为内存在操作过程中,有其他的线程在中间操作过)