并行与并发的区别?线程与进程的区别?
并行与并发的区别?
假设一个有三个学生需要辅导作业,帮每个学生辅导完作业是一个任务
顺序执行:老师甲先帮学生A辅导,辅导完之后再取给B辅导,最后再去给C辅导,效率低下 ,很久才完成三个任务
并发:老师甲先给学生A去讲思路,A听懂了自己书写过程并且检查,而甲老师在这期间直接去给B讲思路,讲完思路再去给C讲思路,让B自己整理步骤。这样老师就没有空着,一直在做事情,很快就完成了三个任务。与顺序执行不同的是,顺序执行,老师讲完思路之后学生在写步骤,这在这期间,老师是完全空着的,没做事的,所以效率低下。
并行:直接让三个老师甲、乙、丙三个老师“同时”给三个学生辅导作业,也完成的很快。
总结:
并发就是指代码逻辑上可以并行,有并行的潜力,但是不一定当前是真的以物理并行的方式运行。并发指的是代码的性质,并行指的是物理运行状态。
顾名思义,并发强调的是一起出发,并行强调的是一起执行。并发的反义是顺序,并行的反义是串行。并发并行并不是互斥概念,只不过并发强调任务的抽象调度,并行强调任务的实际执行。
线程与进程的区别?
- 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
- 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
- 调度和切换:线程上下文切换比进程上下文切换要快得多。
早期的操作系统并没有线程的概念,只有进程,进程负责操作系统对应用程序资源的分配以及程序任务的调度执行,
但随着计算机科学的发展,为了提高操作系统的资源利用率,人们提出了线程的概念,用线程来控制应用程序任务的调度
执行,进程负责操作系统对应用程序资源的分配。也就是说进程是操作系统对资源分配的最小单位,线程是任务调度执行的最小
单位,进程由一个或多个线程组成。
线程的概念实际上可以分为两种,用户线程和内核线程,用户线程指的就是我们应用程序中的线程,内核线程指操作系统处理器所
具有的一种线程。用户线程被调度的时候,会被映射到内核线程上,内核线程进行调度执行。
参考链接:以操作系统的角度述说线程与进程