多线程、进程、并发、并行、同步、异步、伪并发、真并发

进程、线程

1、进程

一个程序,可以独立运行的一段程序。系统对它进行资源分配和调度。

2、线程

进程的基本单位,对它进行cpu分配和调度。只拥有一点在运行中必不可少的资源(寄存器,栈,程序计数器)

3、线程与进程的联系与区别

联系:

(1)线程是指进程内的一个执行单元,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。 但是存在 DOS 这样的单进程(而且无线程概念)系统。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源,线程自己基本上不拥有系统资源。

(3)处理机分给线程,即真正在处理机上运行的是线程。

(4) 线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。

区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

(2)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进

程的资源。

共有特性:

(3)并发性:进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。

4、同一进程下,线程与线程之间的联系

(1)进程可创建多个线程来执行同一程序的不同部分。

(2) 一个线程可以创建和撤消另一个线程,同一个进程中的多线程之间可以并发执行

(3)线程在执行过程中,需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。 (为什么要同步:见同步举例)

(4)充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

线程之间同步举例:

假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件中的字符数。当然,在把整个文件调入内存之前,统计它的计数是没有意义的。由于是不同进程里的线程,操作系统会把两个线程当作是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数。为解决此问题,你必须使两个线程同步工作。

其它:

在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,——无论是从系统资源开销方面或是响应用户请求的效率方面来看。

线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。

并行、并发

解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。

解释三:在一台处理器上"同时"处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

进程的并发和并行与线程的并发和并行:

进程的并发:

并发的关键是你有处理多个任务的能力,不一定要同时执行。在操作系统中cpu只能并发处理进程(存在多个进行,但是是轮流执行的),不能并行。

并行的关键是能同时处理多个任务。

线程的并发和并行:(线程跟处理器联系在一起)

在进程可以同时拥有两个或者多个线程。如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是并发的——每个线程都处于执行过程中的某个状态。

如果程序能够同时执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,此时他们是并行的。

"并行"概念是"并发"概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。

同步、异步

仅针对js语言:

示例场景:同步请求与异步请求

同步请求:发起请求,然后等待,当执行完请的回调函数才继续执行请求代码块之后的代码,如果一直没又响应,会阻塞请求代码块后面代码的执行。

异步请求:发起请求,继续执行请求代码块之后的代码,不会阻塞请求代码块后面代码的执行,当请求被响应时,系统会通知进程处理。这样提高执行效率。

多线程和异步

比如js里是单线程的,里面用异步当时。所以在这里异步和线程不在一个层面的上。

异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候就认为异步和多线程是等同的概念。但是,异步和多线程还是有一些区别的。而这些区别造成了使用异步和多线程的时机的区别。

cpu层面谈区别:

CPU的异步处理:DMA——直 接内存访问的意思,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源和时间。只要CPU在发起数据传输时发送一个指令,硬件就开 始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。是等待执行的

多线程:线程本质上是进程中一段并发运行的代码,线程需要操作系统投入CPU资源来运行和调度。

这个要多个处理器处理才能实现多线程,这些线程是同时执行的。

从执行时机来看,就不是同一个概念

在js里来谈:

多线程即要同时处理多个事件,但是js是顺序执行的,所以即使是对同一行为,也根据事件注册的先后顺序去触发事件,这就不存在多线程。

异步是在处理一个事件的同时,等待的某个事件被触发了,也会执行,是同时处理多个事件

比如页面一直在倒计时,这时候某个数据回来,执行的函数是去渲染页面的某个部分,这时是即在倒计时也在渲染。可以这样举例吗?

适用范围(不知道该从什么层面来讲,感觉不同层面不同的优缺点)

当需要执行I/O操作时,使用异步操作比使用线程+同步 I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.net Remoting等跨进程的调用。

  而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

伪并发和真并发

伪并发是指单核处理器的并发。

真并发是指多核处理器的并发。

原文地址:https://www.cnblogs.com/yaoyao-sun/p/10387792.html

时间: 2024-11-05 20:28:28

多线程、进程、并发、并行、同步、异步、伪并发、真并发的相关文章

并发&并行 同步&异步 GIL 任务 同步锁 死锁 递归锁

# 并发&并行 同步&异步 GIL 任务 同步锁 死锁 递归锁 # 并发:是指系统具有处理多个任务(动作)的能力 # 并行:是指系统具有 同时 处理多个任务(动作)的能力 # 同步:当进程执行到一个IO(等待外部数据)的时候,需要等待外部数据接收完 # 异步:当进程执行到一个IO(等待外部数据)的时候,不需要等待外部数据接收完,还可以做其它的处理 # GIL: 全局解释器锁 在python中,无论你启多少个线程,你有多少个cpu,python在执行的时候在同一时刻只请允许一个线程运行 #

并发 并行 同步 异步 多线程的区别

1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行.其中两种并发关系分别是同步和互斥2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥.3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系.进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待.具有同步关系的一组并发进程相互发送的信息称为消息或事件.其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并

并发 并行 同步 异步 多线程的区别 (转)

1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行.其中两种并发关系分别是同步和互斥 2. 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥. 3. 同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系.进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待.具有同步关系的一组并发进程相互发送的信息称为消息或事件. 其中并发又有伪并发和真并发,伪并发是指单核处理器的并发

并发 并行 同步 异步 多线程 阻塞 非阻塞的区别

1. 并发(concurrency):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行.其中两种并发关系分别是同步和互斥 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥. 同步(synchronous):进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系.进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待.具有同步关系的一组并发进程相互发送的信息称为消息或事件. 其中并发又有伪

浅入了解GCD 并发 并行 同步 异步 多线程

 什么是 GCD?! GCD就是一个函数库(废话) 用来压榨系统的资源,解决多线程处理中一些问题的库(知道这个就够了,很多电影角色都是因为知道太多死得很惨!!!!!) 1.并发与并行 Concurrency vs Parallelism  单核设备:先运行一个线程,执行一个上下文切换.这通常切换很快以致给我们有并发执行地错觉.也就是说在一秒钟内吃了饭也拉了屎,可是每半秒中只能做一件事情(吃饭或拉屎)但是给人的感觉好像是同时进行的.这是单核逻辑模拟出两个线程的假象如下图Concurrency所示:

30分钟读懂进程线程、同步异步、阻塞非阻塞、并发并行

基本概念 1 进程和线程 进程(Process): 是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程.线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的.进程可以理解为一个程序的基本边界.是

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结

同步,异步,串行队列,并发队列,全局队列,主队列等概念的总结 在GCD函数中, 我们常常碰到同步,异步,串行队列,并发队列,全局队列,主队列等概念,而这些概念又常常组合在一起, 十分头疼, 这篇文章就来梳理一下这些烦人的概念. 不想看长篇大论的, 直接看文章末尾的表格即可! 在此之前, GCD中还涉及到两个十分重要的概念, 就是任务和队列 任务(Task): 你需要执行的操作 队列(Queue): 存放任务的容器 GCD中两个重要的函数, 一个同步执行, 一个异步执行 dispatch_asyn

并发 互斥 并行 同步 异步 多线程的区别

并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行.其中两种并发关系分别是同步和互斥 互斥:进程间相互排斥的使用临界资源的现象,就叫互斥. 临界资源(critical resource):一次只能供一个进程使用的资源. 如:硬件有打印机等,软件有变量,磁盘文件(写入的时候).临界区(critical section):把进程中访问临界资源的那段代码成为临界区.为了实现临界资源的互斥访问,只要做到进程互斥地进去自己的临界区,便可以实现

同步/异步/阻塞/非阻塞/并发/并行

1. 概念 1.1 同步和异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就得到返回值了.换句话说,就是由调用者主动等待这个调用的结果. 而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果.换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果.而是在调用发出后,被调用者通过状态.通知来通

IOS多线程知识总结/队列概念/GCD/串行/并行/同步/异步

进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间: 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程. 队列:dispatch_queue_t,一种先进先出的数据结构,线程的创建和回收不需要程序员操作,由队列负责. 串行队列:队列中的任务只会顺序执行(类似跑步) dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial); 并