首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark为什么只有调用action才会触发任务执行呢(附算子优化和使用示例)?

Spark算子主要划分为两类:transformation和action,并且只有action算子触发的时候才会真正执行任务。...微信图片_20200709201425.jpg但初学Spark的人往往都会有这样的疑惑,为什么Spark任务只有调用action算子的时候,才会真正执行呢?...咱们来假设一种情况:假如Spark中transformation直接触发Spark任务!那么产生什么结果呢? 1....导致map执行完了要立即输出,数据也必然要落地(内存和磁盘) 2. map任务的生成、调度、执行,以及彼此之间的rpc通信等等,当牵扯到大量任务、大数据量很影响性能 看到这两点是不是很容易联想到...所以Spark采用只有调用action算子时才会真正执行任务,这是相对于MapReduce的优化点之一。

2.3K00

Spark为什么只有调用action才会触发任务执行呢(附算子优化和使用示例)?

Spark算子主要划分为两类:transformation和action,并且只有action算子触发的时候才会真正执行任务。...还记得之前的文章《Spark RDD详解》中提到,Spark RDD的缓存和checkpoint是懒加载操作,只有action触发的时候才会真正执行,其实不仅是Spark RDD,Spark其他组件如...但初学Spark的人往往都会有这样的疑惑,为什么Spark任务只有调用action算子的时候,才会真正执行呢?咱们来假设一种情况:假如Spark中transformation直接触发Spark任务!...导致map执行完了要立即输出,数据也必然要落地(内存和磁盘) 2. map任务的生成、调度、执行,以及彼此之间的rpc通信等等,当牵扯到大量任务、大数据量很影响性能 看到这两点是不是很容易联想到...所以Spark采用只有调用action算子时才会真正执行任务,这是相对于MapReduce的优化点之一。

1.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

Linux之进程控制

fork函数的实现在操作系统内部,当这个函数准备返回,它的核心代码已经执行完了也就是进程已经被创建了,并且已经OS的运行队列中准备被调度了。...fork后,有两个执行流,父子进程是共享的,所以return会被父子进程各自调度一次,也就是调度两次。 为什么给父进程返回进程的pid,给进程返回0呢?...fork失败 (1)系统中有太多的进程; (2)实际用户的进程数超过了限制。 二、退出码 退出码是用来标识一个进程任务执行结果的情况。...设置为0表示,阻塞式等待进程;设置为WNOHANG,表示非阻塞式等待进程。 返回值:如果等待成功,返回所等待的进程pid;如果等待失败,则返回0。...因此,原进程后续的代码会被新进程的代码和数据所覆盖,因此就不会执行剩余代码了。 这也是为什么只有当程序替换失败才会有返回值,因为如果替换成功就不会执行接下来的代码,返回值就无意义。

16420

100个Linux命令(7)-进程管理

在当前bash环境下,处于可运行状态(即就绪态),当执行cp命令,首先fork出一个bash进程,然后bash上exec加载cp程序,cp进程进入等待队列,由于命令行下敲的命令,所以优先级较高...进程结构和 shell 前台进程 一般命令(如 cp 命令)执行时都会fork进程执行进程执行过程中,父进程进入睡眠,这类是前台进程。...一般 fork 出来的进程,内容和父进程是一样的,包括变量,例如执行 cp 命令也能获取到父进程的变量。但是 cp 命令是在哪里执行的呢? shell 中。...正常情况下杀死父进程导致进程变为孤儿进程,即其PPID改变,但是杀掉终端这种特殊的进程导致该终端上的所有进程都被杀掉。这在很多执行长时间任务的时候是很不方便的。...一般对于简单的后台持续运行进程,使用nohup足以。 另外,shell中的后台进程终端被关闭脱离终端,因此也不受shell和终端的控制。

1.7K20

关于 Android 进程和线程,你必须了解的东西

()) 托管正执行其 onReceive() 方法的 BroadcastRecevier 通常,在任意给定时间前台进程都为数不多。...线程 ---- 线程 Android 中是一个很重要的概念,从用途上来说,线程分为主线程和线程,主线程的作用是「运行四大组件以及处理它们和用户的交互」,而线程的作用则是「执行耗时任务,比如网络请求...IntentService 内部采用 HandlerThread 来执行任务,当任务执行完毕后 IntentService 自动退出。...从任务执行的角度来看,IntentService 的作用很像一个后台线程,但是 IntentService 是一种服务,它不容易被系统杀死从而可以尽量保证任务执行,而如果是一个后台线程的话,由于这个时候进程中没有活动的四大组件...original thread that created a view hierarch can ouch its views."); } } Android 系统为什么不允许线程中访问

77720

探索父进程进程

结论:当我们命令行输入指令去执行的时候,bash帮助我们创建一个进程执行该指令。进程出问题不会影响到父进程。...先来认识一下fork函数: fork函数以调用该函数的进程作为父进程创建一个进程 创建成功,会在父进程中返回进程的PID,进程中返回0;如果失败进程中返回-1,没有进程创建。...为什么fork给父进程返回进程的PID,给进程返回0 fork之后的代码父子共享,返回不同的值是为了区分不同的执行流。创建父子进程,是为了让父子进程执行不同的任务。...fork有两个返回值本质上是因为父子进程共用一份代码导致的,父进程执行return返回一个值,进程执行return返回一个值。 一个变量为什么同时会有两个返回值?...也就是说一个进程退出、失败、崩溃了,都不会影响其他进程。父进程进程也是两个进程,也具有独立性,父子进程不能访问同一份数据,数据代码执行过程中可能会被修改。

8110

使用工作队列管理器(一)

必须尽可能高效地使用硬件资源,以最大限度地提高其执行业务任务的速度。为了实现最大效率,工作队列管理器必须改善执行ObjectScript 代码可能出现的 CPU 利用率不足的问题。...实际上,工作队列管理器限制给定类型的任务可以使用的核心数量,以确保系统上的所有工作负载都可以得到有效处理。...如果需要知道给定进程是否是工作作业,可以进程内调用 $system.WorkMgr.IsWorkerJob()工作队列管理器使用控制器进程来指导工作job,控制器进程是一个执行以下操作的专用进程:启动...发布之前,worker jobs只能处于这种状态很短的时间。激活。只有当它在执行一个工作单元进行转发过程,worker jobs才处于活动状态。处理工作单元被锁或事件阻塞。...如果发生这种情况,控制器进程将淘汰下一个完成工作单元的worker jobs。因此,当worker jobs的活动数量超过为给定工作队列指定的worker jobs的最大数量,可能会有很短的时间段。

36810

Linux进程控制【进程程序替换】

---- 前言 进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 进程 执行其他任务,可以把当前 进程 的程序替换为目标程序,此时需要用到 Linux...,让进程完成对应指令 进程实现对应指令依赖于程序替换 总结: 程序替换的目的是让进程帮我们执行特定任务 就像汽车拥有各种各样的轮胎,如越野需要换上路面兼容性更好、更耐造的越野胎;日常家用时,舒适性更好...等指令后,bash 创建进程,将其替换为对应的指令程序并执行任务,就能实现各种指令 进程程序替换图解 Linux 中的指令都是用 C语言 写的可执行程序,所以可以进行替换 bash 运行后,输入...,进程和待替换程序为同一个进程 这就表明程序替换并不是进程替换 因为是同一个进程,所以对父进程没有任何影响,体现了进程间的独立性 进程执行程序替换前,进程和父进程共享一份只读区域的数据,但因为发生了程序替换...,触发 写拷贝 机制,令进程读取另一块区域的数据 写拷贝 只读数据区也能触发,因为不能影响到父进程 ---- 总结 以上就是本篇关于 Linux 进程程序替换的相关内容了,本文中,我们知道了进行程序替换的目的

18820

Linux进程学习【基本认知】

进程,简单的 进程 二字后面包含着许多知识,比如为什么OS需要对任务进行管理、任务信息是如何组成的、如何创建新任务等,下面我将带大家从 冯诺依曼 结构体系开始,理解学习 进程 相关知识 ---- 正文...* 这个函数有两个返回值 * 进程创建成功,给父进程返回进程的PID,给进程返回0 * 创建失败,返回 -1 */ int fork(void) fork 函数是一个非常重要的函数,它能在当前进程下主动创建...理解fork函数的返回值 * 通过if语句进行分流 * 总结:fork创建进程成功,给父进程返回进程PID,给进程返回0, 如果失败返回-1;通过两次fork可以发现当父进程执行后,才会去执行进程...程序运行结果如下: 不难发现,进程 是否出现取决于在当前进程中是否调用 fork 函数 fork函数工作原理: fork 创建进程新建一个属于 进程 的 PCB ,然后把 父进程...bash 父进程被销毁后,进程变成 孤儿进程 进程间具有独立性,包括父子进程 因为 写拷贝 机制,父进程不会影响到进程 ---- 总结 以上就是本文关于 进程 相关知识的讲解了,我们从 冯诺依曼

13720

Linux系统-进程控制

0,对父进程返回进程的pid 写拷贝 概念: fork成功之后父子代码共享,当父子不写入数据,数据也是共享的,当任意一方试图写入,便以写拷贝的方式各自一份副本 为什么数据要进行写拷贝...: 进程具有独立性,多进程运行,需要独享各种资源,多进程运行期间互不干扰,不能让进程的修改影响到父进程 为什么不在创建进程的时候就进行数据的拷贝: 进程不一定会使用父进程的所有数据,并且进程不对数据进行写入的情况下...,但这并不代表代码不能进行写拷贝,例如在进行进程替换的时候,则需要进行代码的写拷贝 示图: fork函数为什么要给进程返回0,给父进程返回进程的PID: 一个父进程可以创建多个子进程,而一个进程只能有一个父进程...因此,对于进程来说,父进程是不需要被标识的;而对于父进程来说,进程是需要被标识的,因为父进程创建进程的目的是让其执行任务的,父进程只有知道了进程的PID才能很好的对该进程进行深入操作 为什么...fork存在“两个”返回值: 父进程创建进程进程以父进程为模板构建进程,代码数据父子共享,返回也是父子进程进行修改数据,由页表发现该数据是父子进程共享的,所以系统找到另一个物理空间进行拷贝数据

1.5K30

操作系统-进程管理

CPU相关信息:CPU中各个寄存器的值,当进程发生切换,CPU的状态信息就会被保存在PCB中,以便进程恢复能从断点处继续执行 如何保存PCB?...进程的控制 操作系统允许一个进程创建进程,而且允许进程继承父进程所拥有的资源,当进程被终止,其进程处继承的资源需要还给父进程。...创建进程 为新进程分配一个唯一的进程标识号,并申请一个空白的PCB,PCB是有限的,如果申请失败则创建失败进程分配资源,如果资源不足,进程进入等待状态,以等待资源 初始化PCB 如果进程的调度队列能够接纳新进程...,将CPU资源分配给其他进程 如果还有进程,则需要将所有的进程终止 将该进程所拥有的全部资源归还给父进程或操作系统 将其从PCB所在队列中删除 CPU上下文切换 在运行每一个任务,CPU都需要知道任务从哪里加载...当进程的时间片消耗完以后,进程从运行状态变为就绪状态 进程系统资源不足,需要等待资源满足以后才可以运行,这时进程挂起,并由系统调度其他进程运行 当进程通过sleep等函数将自己主动挂起 当优先级更高的进程运行时

58230

【Linux】进程控制

fork 返回,开始调度器调度 当父进程创建进程后,fork 之后父子进程代码共享,可以使用 if else 进行分流,让进程和父进程执行不同的任务。...写拷贝 我们知道,当父进程创建进程后,操作系统会将父进程的 pcb、进程地址空间、页表等拷贝一份给进程;那么当进程想要修改数据的时候,我们知道会发生写拷贝,那么操作系统怎么知道什么时候进行写入拷贝呢...下面我们看一段代码,验证父进程是否等待进程并当进程为僵尸状态是否回收进程的资源: #include #include ...define TASK_NUM 5 10 11 // 定义一个函数指针 12 typedef void (*task_t)(); 13 14 // 15 //父进程等待需要执行任务...所以 exec 这样的函数,如果当前进程执行成功了,则后续代码没有机会执行了,因为被替换了!所以 exec 这样的函数只有失败的返回值,失败返回 -1;没有成功的返回值!

8510

think-queue 解析上

当不存在新消息sleep一段时间然后退出; 有 daemon 参数 work进程循环地处理队列中的消息,直到内存超出参数配置才结束进程。...当不存在新消息,会在每次循环中sleep一段时间; listen: 父进程 + 进程 的处理模式; 会在所在的父进程创建一个单次执行模式的work进程,并通过该work进程来处理队列中的下一个消息...,当这个work进程退出之后; 所在的父进程监听到该进程的退出信号,并重新创建一个新的单次执行的work进程; 2: 退出时机不同 work: 看上面 listen: 所在的父进程正常情况一直运行...命令行参数中设置,指work进程的超时时间,这个时间只对当前执行的listen 命令有效,timeout 针对的对象是 work 进程; 5: 使用场景不同 work 适用场景是: 01: 任务数量较多...控制台执行 php think queue:work --queue test --daemon 会在控制台一次输出 守护进程开启 任务延迟执行 失败的处理 如果有任务执行失败或者执行次数达到最大值 触发

75221

think-queue 解析上

当不存在新消息sleep一段时间然后退出; 有 daemon 参数 work进程循环地处理队列中的消息,直到内存超出参数配置才结束进程。...当不存在新消息,会在每次循环中sleep一段时间; listen: 父进程 + 进程 的处理模式; 会在所在的父进程创建一个单次执行模式的work进程,并通过该work进程来处理队列中的下一个消息...,当这个work进程退出之后; 所在的父进程监听到该进程的退出信号,并重新创建一个新的单次执行的work进程; 2: 退出时机不同 work: 看上面 listen: 所在的父进程正常情况一直运行...命令行参数中设置,指work进程的超时时间,这个时间只对当前执行的listen 命令有效,timeout 针对的对象是 work 进程; 5: 使用场景不同 work 适用场景是: 01: 任务数量较多...如果有任务执行失败或者执行次数达到最大值 触发 queue_failed app\index\behavior@run方法里面写失败的逻辑 比如邮件通知 写入日志等 最后我们来说一下如何在其他框架或者项目中给

1.1K51

【Linux】进程控制

**这是我们进程地址空间时候所说的。**这也很好理解 fork常用法:1.一个父进程希望复制自己,使父子进程同时执行不同的代码段。2.一个进程执行一个不同的程序。...---- 二、退出码 main函数的return 0系统上叫做进程退出对应的退出码,标记进程执行的结果是否正确 我们如何找到写的代码完成的任务的结果如何?进程退出码,可用echo $?...进程为什么要等待 1.父进程通过进程等待的方式,回收进程资源 2.获取进程退出信息 进程等待的方法 wait 返回值:成功返回被等待进程pid,失败返回-1。...阻塞等待(0):父进程调用wait/waitpid等子进程,直到进程退出,这是阻塞等待 非阻塞等待(WNOHANG):检测状态,如果没有就绪父进程检测之后立即返回。...通过虚拟地址空间以及页表保证进程独立性,一旦执行流想替换代码或者数据就会发生写拷贝。

17930

【Linux】详解进程终止&&进程等待

这就是为什么当我们要对常量字符串的内容做修改程序运行阶段会报错的底层原因。         通过页表的权限位,我们也可以很好地解释写拷贝是如何做到的。...通过以上过程操作系统就可以按需进行写拷贝。 二、进程终止 main函数的返回值我们叫做进程的退出码。一般0表示进程执行成功,非0表示进程执行失败。可以用非0的数字表示进程失败的原因。...2、另外,进程一旦变成僵尸状态,那就刀枪不入,kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程。 3、最后,父进程派给进程任务完成的如何,我们需要知道。...调用wait函数父进程默认进行阻塞等待,等待任意一个进程退出。等待成功,wait返回进程的pid,等待失败返回小于0的值。 ...阻塞等待进程阻塞在waitpid这里一直等待进程返回,非阻塞等待采用轮询的方法查看进程的退出信息,轮询的间隙父进程可以继续做别的工作。

11810

【Linux】进程控制

; 其次,一个函数正常执行的情况下,函数 return 之前函数的主体功能肯定已经被执行完了;对于 fork 函数来说,fork 函数的作用是创建进程,所以 fork return 之前就已经创建了进程...5、fork 调用失败原因 如下两种原因可能导致 fork 调用失败: 系统中有太多的进程; 实际用户的进程数超过了限制; 我们可以写一个死循环创建进程的程序来测试我们当前OS最多能创建多少个进程...---- 二、进程终止 1、进程退出码 我们运行一个进程是为了让该进程完成某一项任务,而既然是完成任务,就需要对任务执行结果的正确性进行标定;进程退出码的作用就是就是标定一个进程执行结果是否正确,不同的退出码表示不同的执行结果...我们创建一个进程的目的是为了让其帮我们完成某种任务,而既然是完成任务进程结束前就应该返回任务执行的结果,供父进程或者操作系统读取。...当父进程执行到 waitpid 函数,如果子进程未退出,父进程直接读取进程的状态并返回,然后接着执行后面的语句,不会等待进程退出。

4K00

玩转Redis持久化

aof-load-truncated yes 如果该配置启用,加载发现aof尾部不正确是,向客户端写入一个log,但是继续执行,如果设置为 no ,发现错误就会停止,必须修复后才能重新加载。...介绍原理之前先说下Redis内部的定时任务机制,定时任务执行的频率可以配置文件中通过 hz 10 来设置(这个配置表示1s内执行10次,也就是每100ms触发一次定时任务)。...因此我们配置Redis,一定要整体考虑一些触发定时任务的配置,根据实际情况进行调整。 RDB的原理 Redis中RDB持久化的触发分为两种:自己手动触发与Redis定时触发。...bgsave:该触发方式fork一个进程,由进程负责持久化过程,因此阻塞只会发生在fork进程的时候。...执行 shutdown,如果没有开启aof,也触发。

54010

Linux进程控制

那么,为什么这样?接下来我们好好地讨论一下fork函数。 linux中fork函数非常重要的函数,它从已存在进程中创建一个新进程。新进程进程,而原进程为父进程。...2.如何理解fork函数返回后,进程中返回0,父进程返回进程id? 3.如何理解同一个id值,为什么保存两个不同的值,让if  else  if同时执行?...所以,fork函数就有两个返回值,一个是返回进程的,一个是返回父进程的。 第三个问题:3.如何理解同一个id值,为什么保存两个不同的值,让if  else  if同时执行? 返回的本质就是写入。...①如果子进程已经退出,调用wait/waitpid,wait/waitpid立即返回,并且释放资源,获得进程退出信息。...所以我们回到上面的那个问题,为什么第二个printf没有执行? 答案就是:因为第二个printf是execl之后的,执行了execl后,第二个printf被覆盖掉了,所以也就没办法执行了。

2.4K30

基于NodeJS从零构建线上自动化打包工作流

一共有三种状态:进行中,已完成,失败。对应如下图所示界面: ? ? 至于为什么没有出现下载失败的状态,不要问我,问就是没有失败过(完了,找虐了)。...2. nodejs如何使用父子进程 我们要想实现一个自动化工作流, 要考虑的一个关键问题就是任务执行时机以及以何种方式执行....当我们使用nodejs作为后台服务器, 由于nodejs本身是单线程的,所以当用户请求传入nodejs, nodejs不得不等待这个"耗时任务"完成才能进行其他请求的处理, 这样将会导致页面其他请求需要等待该任务执行结束才能继续进行...好在nodejs设计支持进程, 我们可以把耗时任务放入进程中来处理,当进程处理完成之后再通知主进程. 整个流程如下图所示: ?...app.use(async (ctx, next) => { if(ctx.url === '/fetch') { const data = ctx.request.body; // 通知进程开始执行任务

1.7K10
领券