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