并发的发展历史
其实,在早期计算机并没有包含操作系统,这个时候,这个计算机只跑一个程序,这个程序独享计算机的所有资源,这个时候不存在什么并发问题,但是对计算机的资源来说,确实是一种浪费。早期编程都是基于单进程来进行,随着计算机技术的发展,于是,操作系统出现了,操作系统改变了这种现状,让计算机可以运行多个程序,并且不同的程序占用独立的计算机资源,如内存,CPU等。
操作系统出现后:
- 资源利用率:可以在其他程序执行过程出现等待的时候,去执行其他程序,从而提高程序的利用率
- 公平性:所有的程序可以共享计算机资源,一种有效的方式是通过时间片的方式来让程序共享计算机资源
- 任务通信:在编写多任务程序时,可以一个程序执行一个任务,必要时,程序之间进行通信即可
当计算机从单程序变成多程序之后,这个时候又发展出了多线程,线程是进程里面的每个执行控制流,或叫执行路线。如果没有明确的协同机制,那么每个线程将独立运行,共享着进程的内存及CPU资源,多进程多线程之间虽然让多任务并行处理的能力大大提升,但是本质上还是分时系统,并不是时间上真正的并行,解决这个问题的方式显而易见,就是让多个CPU能够同时计算任务,从而实现真正意义上的多任务并行。
并发的优势
并发可以满足多任务任务需求,比如一边写代码一边听音乐,即使编写多线程程序具有挑战性,但它仍在使用中,是因为它可以带来如下的好处:
- 更好的资源利用
- 在某些场景下程序的设计会更简单
- 提升程序的响应性
- 多进程/多任务:单个CPU下的并发,如在使用QQ的同时打开爱奇艺看剧
- 多线程/子任务:单个应用下的并发,如博客网站可以处理不同用户的访问请求
进程的调度
单核的 CPU 一次只能执行一个任务,想要实现多任务,需要把 CPU 的运行时间切成一段一段的时间片,每个时间片运行一个程序,循环的分配时间片给不同的应用程序,由于时间片非常的