说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Project Tungsten:让Spark将硬件性能压榨到极限

HTML文档下载 WORD文档下载 PDF文档下载
对于Spark来说,通用只是其目标之一,更好的性能同样是其赖以生存的立足之本。北京时间4月28日晚,Databricks在其官方博客上发布了Tungsten项目,并简述了Spark性能提升下一阶段的RoadMap。

本文编译自Databricks Blog(Project Tungsten: Bringing Spark Closer to Bare Metal),作者Reynold Xin(@hashjoin)、Josh Rosen。由七牛云存储技术总监陈超(@CrazyJvm)友情审校。

以下为原文:

在之前的博文中,我们回顾和总结了2014年Spark在性能提升上所做的努力。本篇博文中,我们将为你介绍性能提升的下一阶段——Tungsten。在2014年,我们目睹了Spark缔造大规模排序的新世界纪录,同时也看到了Spark整个引擎的大幅度提升——从Python到SQL再到机器学习。

Tungsten项目将是Spark自诞生以来内核级别的最大改动,以大幅度提升Spark应用程序的内存和CPU利用率为目标,旨在最大程度上压榨新时代硬件性能。Project Tungsten包括了3个方面的努力:

  • Memory Management和Binary Processing:利用应用的语义(application semantics)来更明确地管理内存,同时消除JVM对象模型和垃圾回收开销。
  • Cache-aware computation(缓存友好的计算):使用算法和数据结构来实现内存分级结构(memory hierarchy)。
  • 代码生成(Code generation):使用代码生成来利用新型编译器和CPU。

之所以大幅度聚焦内存和CPU的利用,其主要原因就在于:对比IO和网络通信,Spark在CPU和内存上遭遇的瓶颈日益增多。详细信息可以查看最新的大数据负载性能研究(Ousterhout ),而我们在为Databricks Cloud用户做优化调整时也得出了类似的结论。

为什么CPU会成为新的瓶颈?这里存在多个问题:首先,在硬件配置中,IO带宽提升的非常明显,比如10Gbps网络和SSD存储(或者做了条文化处理的HDD阵列)提供的高带宽;从软件的角度来看,通过Spark优化器基于业务对输入数据进行剪枝,当下许多类型的工作负载已经不会再需要使用大量的IO;在Spark Shuffle子系统中,对比底层硬件系统提供的原始吞吐量,序列化和哈希(CPU相关)成为主要瓶颈。从种种迹象来看,对比IO,Spark当下更受限于CPU效率和内存压力。

1. Memory Management和Binary Processing

在JVM上的应用程序通常依赖JVM的垃圾回收机制来管理内存。毫无疑问,JVM绝对是一个伟大的工程,为不同工作负载提供了一个通用的运行环境。然而,随着Spark应用程序性能的不断提升,JVM对象和GC开销产生的影响将非常致命。

一直以来,Java对象产生的开销都非常大。在UTF-8编码上,简单如“abcd”这样的字符串也需要4个字节进行储存。然而,到了JVM情况就更糟糕了。为了更加通用,它重新定制了自己的储存机制——使用UTF-16方式编码每个字符(2字节),与此同时,每个String对象还包含一个12字节的header,和一个8字节的哈希编码,我们可以从 Java Object Layout工具的输出上获得一个更清晰的理解:

java.lang.String object internals:OFFSET  SIZE   TYPE DESCRIPTION                    VALUE     0     4        (object header)                ...     4     4        (object header)                ...     8     4        (object header)                ...    12     4 char[] String.value                   []    16     4    int String.hash                    0    20     4    int String.hash32                  0Instance size: 24 bytes (reported by Instrumentation API)
毫无疑问,在JVM对象模型中,一个4字节的字符串需要48字节的空间来存储!

JVM对象带来的另一个问题是GC。从高等级上看,通常情况下GC会将对象划分成两种类型:第一种会有很高的allocation/deallocation(年轻代),另一种的状态非常稳定(年老代)。通过利用年轻代对象的瞬时特性,垃圾收集器可以更有效率地对其进行管理。在GC可以可靠地估算对象的生命周期时,这种机制可以良好运行,但是如果只是基于一个很短的时间,这个机制很显然会遭遇困境,比如对象忽然从年轻代进入到年老代。鉴于这种实现基于一个启发和估计的原理,性能可以通过GC调优的一些“黑魔法”来实现,因此你可能需要给JVM更多的参数让其弄清楚对象的生命周期。

然而,Spark追求的不仅仅是通用性。在计算上,Spark了解每个步骤的数据传输,以及每个作业和任务的范围。因此,对比JVM垃圾收集器,Spark知悉内存块生命周期的更多信息,从而在内存管理上拥有比JVM更具效率的可能。

为了扭转对象开销和无效率GC产生的影响,我们引入了一个显式的内存管理器让Spark操作可以直接针对二进制数据而不是Java对象。它基于sun.misc.Unsafe建立,由JVM提供,一个类似C的内存访问功能(比如explicit allocation、deallocation和pointer arithmetics)。此外,Unsafe方法是内置的,这意味着,每个方法都将由JIT编译成单一的机器指令。

在某些方面,Spark已经开始利用内存管理。2014年,Databricks引入了一个新的基于Netty的网络传输机制,它使用一个类jemalloc的内存管理器来管理所有网络缓冲。这个机制让Spark shuffle得到了非常大的改善,也帮助了Spark创造了新的世界纪录。

新内存管理的首次亮相将出现在Spark 1.4版本,它包含了一个由Spark管理,可以直接在内存中操作二进制数据的hashmap。对比标准的Java HashMap,该实现避免了很多中间环节开销,并且对垃圾收集器透明。


当下,这个功能仍然处于开发阶段,但是其展现的初始测试行能已然令人兴奋。如上图所示,我们在3个不同的途径中对比了聚合计算的吞吐量——开发中的新模型、offheap模型、以及java.util.HashMap。新的hashmap可以支撑每秒超过100万的聚合操作,大约是java.util.HashMap的两倍。更重要的是,在没有太多参数调优的情况下,随着内存利用增加,这个模式基本上不存在性能的衰弱,而使用JVM默认模式最终已被GC压垮。

在Spark 1.4中,这个hashmap可以为DataFracmes和SQL的聚合处理使用,而在1.5中,我们将为其他操作提供一个让其利用这个特性的数据结构,比如sort和join。毫无疑问,它将应用到大量需要调优GC以获得高性能的场景。

2. Cache-aware computation(缓存友好的计算)

在解释Cache-aware computation之前,我们首先回顾一下“内存计算”,也是Spark广为业内知晓的优势。对于Spark来说,它可以更好地利用集群中的内存资源,提供了比基于磁盘解决方案更快的速度。然而,Spark同样可以处理超过内存大小的数据,自动地外溢到磁盘,并执行额外的操作,比如排序和哈希。

类似的情况,Cache-aware computation通过使用 L1/ L2/L3 CPU缓存来提升速度,同样也可以处理超过寄存器大小的数据。在给用户Spark应用程序做性能分析时,我们发现大量的CPU时间因为等待从内存中读取数据而浪费。在 Tungsten项目中,我们设计了更加缓存友好的算法和数据结构,从而让Spark应用程序可以花费更少的时间等待CPU从内存中读取数据,也给有用工作提供了更多的计算时间。

我们不妨看向对记录排序的例子。一个标准的排序步骤需要为记录储存一组的指针,并使用quicksort 来互换指针直到所有记录被排序。基于顺序扫描的特性,排序通常能获得一个不错的缓存命中率。然而,排序一组指针的缓存命中率却很低,因为每个比较运算都需要对两个指针解引用,而这两个指针对应的却是内存中两个随机位置的数据。


那么,我们该如何提高排序中的缓存本地性?其中一个方法就是通过指针顺序地储存每个记录的sort key。举个例子,如果sort key是一个64位的整型,那么我们需要在指针阵列中使用128位(64位指针,64位sort key)来储存每条记录。这个途径下,每个quicksort对比操作只需要线性的查找每对pointer-key,从而不会产生任何的随机扫描。希望上述解释可以让你对我们提高缓存本地性的方法有一定的了解。

这样一来,我们又如何将这些优化应用到Spark?大多数分布式数据处理都可以归结为多个操作组成的一个小列表,比如聚合、排序和join。因此,通过提升这些操作的效率,我们可以从整体上提升Spark。我们已经为排序操作建立了一个新的版本,它比老版本的速度快5倍。这个新的sort将会被应用到sort-based shuffle、high cardinality aggregations和sort-merge join operator。在2015年底,所有Spark上的低等级算法都将升级为cache-aware,从而让所有应用程序的效率都得到提高——从机器学习到SQL。

3. 代码生成

大约在1年前,Spark引入代码生成用于SQL和DataFrames里的表达式求值(expression evaluation)。表达式求值的过程是在特定的记录上计算一个表达式的值(比如age > 35 && age < 40)。当然,这里是在运行时,而不是在一个缓慢的解释器中为每个行做单步调试。对比解释器,代码生成去掉了原始数据类型的封装,更重要的是,避免了昂贵的多态函数调度。

在之前的博文中,我们阐述了代码生成可以加速(接近一个量级)多种TPC-DS查询。当下,我们正在努力让代码生成可以应用到所有的内置表达式上。此外,我们计划提升代码生成的等级,从每次一条记录表达式求值到向量化表达式求值,使用JIT来开发更好的作用于新型CPU的指令流水线,从而在同时处理多条记录。

在通过表达式求值优化内部组件的CPU效率之外,我们还期望将代码生成推到更广泛的地方,其中一个就是shuffle过程中将数据从内存二进制格式转换到wire-protocol。如之前所述,取代带宽,shuffle通常会因数据系列化出现瓶颈。通过代码生成,我们可以显著地提升序列化吞吐量,从而反过来作用到shuffle网络吞吐量的提升。


上面的图片对比了单线程对800万复杂行做shuffle的性能,分别使用的是Kryo和代码生成,在速度上后者是前者的2倍以上。

Tungsten和未来的工作

在未来的几个版本中,Tungsten将大幅度提升Spark的核心引擎。它首先将登陆Spark 1.4版本,包括了Dataframe API中聚合操作的内存管理,以及定制化序列化器。二进制内存管理的扩展和cache-aware数据结构将出现在Spark 1.5的部分项目(基于DataFrame模型)中。当然如果需要的话,这个提升也会应用到Spark RDD API。

对于Spark,Tungsten是一个长期的项目,因此也存在很多的可能性。值得关注的是,我们还将考察LLVM或者OpenCL,让Spark应用程序可以利用新型CPU所提供的SSE/SIMD指令,以及GPU更好的并行性来提升机器学习和图的计算。

Spark不变的目标就是提供一个单一的平台,让用户可以从中获得更好的分布式算法来匹配任何类型的数据处理任务。其中,性能一直是主要的目标之一,而Tungsten的目标就是让Spark应用程序达到硬件性能的极限。更多详情可以持续关注Databricks博客,以及6月旧金山的Spark Summit。

也谈Windows 下的自动存盘 -VB资料 一个小巧精致的CPU监视器 -VB资料 应用VB4.0实现工业控制的实时曲线和历史曲线 应用程序中实现关机功能-VB资料 萤幕抓取与萤幕保护程式 -VB资料 用VB5.0创建Windows快捷方式 用VB5.0收集键盘和鼠标信息 用VBA限制非注册软件使用时间 用VB编程检测当前电池使用情况 用VB编写定时关闭计算机的程序 用VB编写键盘拦截程序 用VB函数轻松访问系统注册表 用VB设计一个定时闹钟程序 用VB实现拖放功能 在VB中启动控制面板 在VB中异步执行程序 在Visual Basic中终止Windows 95 在关机或Logff前信息的拦截-VB资料 VB怎样捕捉窗体的鼠标? VB怎样存取注册表信息 VB怎样改变双击鼠标的时间间隔? VB怎样关闭一个正在运行的程序 VB怎样限制鼠标移动 ANI文件格式 -VB资料 AVI文件格式-VB资料 DBF文件转为MDB文件的方法 -VB资料 FLIC动画文件的播放程序设计-VB资料 MS Office 开发工具VBA TextBox 中英文输入方法切换-VB资料 TXT文件的读取-VB资料 VB 如何将dbgrid印出来 高薪寻找西安的兼职UNIX 程序员 如何制作下拉菜单 请高手指点:好猫为何不工作? 一种设想,20台电脑5根电话线上网,如何达到较快的速度? 对话框程序调试时的问题?!!!! 请介绍几本好用的自学C语言的书籍好吗?? 紧急求救,请高手来看看 .NET和JAVA到底哪个好? 谁来救我?ISequentialStream::write()为何不好使? 定义类型的困惑 大虾们,如何做一个图标选择框!!!(详情见内) ADO编程问题求解!!!!!!!!!!! ****************简单问题,高分求救??????????????????????? 请问怎样在TabStrip中的选项卡中增加图片?谢了 工程如何能建的工整一些? www.alldas.de为什么无法访问了? 关于动态控件的问题 ADO编程问题求解 怎么编程产生1MHz甚至更高频率的周期信号? 紧急求助—有关JMail4.1附件问题 挥泪大送分!!!!! 怎样才能让自己变胖? 做个仅有对话框的应用,但想把它放到托盘, 给ASP爱好者提个建议! 关于SQLserver2000“视图“的两个问题,请教高手! 好久没上网了,送分以庆祝再回csdn!!!!! 做浏览器,如何实现 “后退”,“前进”,这二个功能? 如何使C:盘,D盘的根目录不共享? 用resin时,是否需要jdk,如何配置?分必给! SDI中的某一个子视图里怎样对主窗口的状态栏进行更改?? ◇◆◇ 失恋代表什么? ◇◆◇ 我英语不懂,想考高程.行吗 ◇◆◇ 学生生涯快完了,大家来说说对学生生涯的感受,特别是什么最深刻的! ◇◆◇ 求救!如何把SQL命令从前端应用程序传给应用程序服务器 要去招商行笔试了,有参加过的兄弟给点建议。 ###############讨论一下->微软全力推出.NET技术和C#语言的出现,VC++还有多久的寿命??? 要去招商行笔试了,有参加过的兄弟给点建议 如何发一消息,帮别人问的 高手帮助!!! 要去招商行笔试,有参加过的兄弟给点建议。 要去招商行笔试,有参加过的兄弟给点建议 我配置的IIS,为什么只能读数据库,不能写入?为什么? 我要去招商行笔试了,有参加过的兄弟给点建议。 好久没发帖了……………… 请问LINUX/UNIX下那种扩展名的文件是可执行的?DOS的。EXE对应的格式是什么? C++入门看什么书好? c++一问题 20分呀!!!!!谁有BIG5到GB的好方法!(除了用码表文件) 请介绍一下FREENET中所谓“寻找最近主机”的算法。 isapiapp的问题?如何定义一个全局变量,使后一个运行的程序不会更改前一个程序的变量 请问response.buffer = true 有什么用? 无论x取何值,多项式(m-1)x的3次方+2mx的2次方+(m+1)x+p都等于px的2次方-qx+p,求(m+p)的p-q的值? 已知x1,x2是方程x^2+px+q=0的两个实数根,且x1^2+x1x2+x2^2=5,求q能取最大值. 设函数f(x)=ax2+bx+c(c>0),且f(1)=-a/2 求证:函数f(x)有两个零点 设x1,x2是函数f(x)的两个零点,求|x设函数f(x)=ax2+bx+c(c>0),且f(1)=-a/2 1.求证:函数f(x)有两个零点2.设x1,x2是函数f(x)的两个零点,求| 当x等于3时,代数式px的3次方+qx+1的值为2002,当x等于-3时,求代数式px的3次方+qx+1的值 (x1,x2,x3)乘行列式a11,a12,a13 a21,a22,a23 a31,a32,a33再乘x1,x2,x3.感激不尽x1,x2,x3是一列的,应该可以叫一阶行列式吧, 求函数f(x)=e^x+2x+3的零点所在的区间以及零点的个数 设x1、x2是关于x的方程x²+px+q=0的两根,x1+1、x2+1是关于x的x²+qx+p=0的两根,求p、q的值 行列式计算 形如向量A(a,b.c)或 a 的行列式怎么求?b c 和 a11 a12 a13 a21 a22 a23 的行列式怎么求呢?说白了就是单向量α β 和矩阵(不是方阵) 可以求其行列试吗?怎么求? 函数f(x)=xcosx^2在区间[0,4]上的零点个数为? 已知X²+PX+q=O的两根之差等于方程X²+qX+P=0的两根之差那么除去P²-4q>0与q²-4P>0之外,P与q还应具有关系式 设行列式|a11 a12#a21 a22|=m |a13 a11#a23 a21|=n 则行列式|a11 a12+a13#a21 a22+a23| 等于? 已知函数f(x)=1/3ax^3+1/2bx^2+cx.(I)若f'(1)=-1/2a,3a>2c>2b,试问:导函数f'(x)在区间(0,2)内是否有零点,并说明理由.(II)在上面条件下,若导函数f'(x)的两个零点之间的距离不小于根号3,求b/a的取值范围 关于x的一元二次方程x²+px+q=0的两根分别为x1=-3 x2=1,求p和q的值? 行列式第一行X1^2-1 X1X2 ...X1Xn 第二行X2X1 X^2-1 ...X2Xn 最后行XnX1 XnX2 ...Xn^2-1的值 ∑Xi^2=1 已知定义在R上的函数f(x)=1/3ax^3+1/2bx^2+cx(a<b<c)在x=1时取得极值,且y=f(x)的图象有一点处的切线斜率为-a(1)求证:0≤b/a<1(2)若f(x)在区间(s,t)上为增函数,求证:-2 如果关于x的一元二次方程x的平方+px+q=0的两根分别为x1=2,x2=1,那么p、q的值分别是A 、3,2 B、3,-2 C、2,-3 D、2,3应该选哪个我想知道过程是如何解 计算行列式,第一行:x,y.y,第二行:y,x...y中间几行省略号,最后一行:y y.x 已知函数f(x)=1/3ax^3+1/2bx^2+cx(a>0).若函数f(x)有三个零点分别为x1,x2,x3,且x1+x2+x3=-3,x1x2=-9,求函数f(x)的单调区间;(2)若f'(1)=-1/2a,3a>2c>2b,证明:函数f(x)在区间(0,2)内一定有极值点;(3)在(2)的条件下,若函数 已知、x1=2+3i是实系数一元二次方程x²+px+q=0的一个根求实数p,q及另一个跟x2 计算行列式|1+x1^2 x1x2...x1xn,x2x1 1+x2^2...x2xn.xnx1 xnx2...1+xn^2| 已知函数f(x)=3ax²+2bx+c,a+b+c=0,且f(0)·f(1)>0.若x1、x2是方程f(x)=0的两个实根,求|x1-x2|的取值范围. 如果关于x的一元二次方程x2+px+q=0的两根分别为x1=3、x2=1,那么这个一元二次方程是( )A.x2+3x+4=0 B.x2-4x+3=0 C.x2+4x-3=0 D.x2+3x-4=0 数列满足x1=1,x2=2/3,且1/xn-1+1/xn+1=2/xn(n>=2),则xn等于多少 已知函数f(x)=x3+bx2+cx+d的零点x1,x2,x3满足-2 已知关于x的方程x²+px+q=0的两个根为x1=3,x2=4,则二次三项式x²-px+q可分解为: 有一列数x1,x2,x3······xn已知x1=1,x2-x1=3,x3-x2=5,···,xn-x n-1=2n-1,当xn+x n-1=181,n的值是 已知函数f(x)=│lgx│-(1/2)^x有两个零点x1,x2则有A.x1x21 D.0 若二次三项式x²-px+q可以分解为(x-1)(x+2),那么方程x²-px+q=0的两个实数根是 有一列数,第一个位x1=1.第二个为x2=3,从第三个数开始依次为x3、x4、xn,从第二个数有一列数,第一个位x1=1.第二个为x2=3,从第三个数开始依次为x3、x4、xn,从第二个数开始,每个数是相邻两个数的一 已知函数f(x)=x^3+bx^2+cx+d,f(x)的三个零点x1,x2,x3分别为公差为3的等差数列{an}的前三项,f'(x)/3+3=0有唯一解(1)求数列{an}的通项公式(2)设数列{an}的前n项和为Sn,数列{Sn}的前n项和为Tn 设x1,x2是方程x²+px+q=0的两实数,x1+1,x2+1是关于x的方程x²+qx+p=0的两实跟,则p=?q=? 已知关于x的方程x²-px+q的两个根是x₁=1,x₂=-2,则二次三项式x²-px+q请用语言说明为什么 一列数:X1、X2、X3、.、Xn、Xn+1、.,其中X1=3 (1)如果对任意的n,有Xn+1=Xn+2 计算X2=( )一列数:X1、X2、X3、......、Xn、Xn+1、......其中X1=3(1)如果对任意的n,有Xn+1=Xn+2计算X2=( )X3=( )X4=( 若p,q为正实数,且关于x的方程x2+px+q=0与x2+qx+p=0均有实根,求p+q的最小值cdinten 你的答案不对恶,把4代进去就是错的。 若多项式x²+px+q可分解为(x+a)(x+b)则方程x²+px+q=0的根为x1 x2 设X1、X2、X3……Xn是整数,并满足:(1)-1≤Xi≤2 i=1、2、.n;(2)X1+X2+……+Xn=19 (3)X1的平方+X2的平方+……+Xn的平方=99求X1的立方+X2的立方+……Xn的最大值与最小值 方程x的平方+px+q=0的解集是A,方程X的平方+qx+2p=0的解集是B,又AnB={-1},求AUB 已知关于x的方程2x²+px+q=0的两根为x=2,x=-3,则二次三项式2x²+px+q可以因式分解为 已知X1,X2,X3,...Xn中每一个数值只能取-2,0,1中的一个,且满足:X1+X2+X2+...+Xn=-17,X1²+X2²+X3²+...+Xn²=37求X1³+X2³+X3³+...+Xn³的值当X=1+√2002/2时,代数式(4X³-2005X-2001)^2009的 若方程x^2+px+q=0与x^2+qx+p=0有一公共根,且p不等于q,求(p+q)^2009的值答出来还送积分哦~加油.. 已知关于x的方程x^2+px+q=0的两根为x1=3,x2=-4,则二次三项式x^2+px+q可分解为 有一列数X1 X2 X3 .XN XN+1 X1=3 如果对任意的N 有XN+1=2XN 试着 把 XN用N表示出来 一元二次方程px平方+qx平方+r=0(p不等于0)的两根为0和-1,则q:p= 已知关于x的一元二次方程kx²-px-3=0的二根分别为x1,x2,其中(1/x1+1/x2)²=4,求k,q的值 若一组数据X1,X2,X3,X4,…,Xn的方差为0,则表示( )A.X拔=0B.X1=X2=…=Xn=0C.X1=X2=…=XnD.无法确定 已知方程x^2+px+q=0的一个根与方程x^2+qx-p=0的一个根互为相反数,并且p不等于q,求p-q的值. 关于x的一元二次方程x^2-px-p=0有两实数根x1,x2,若x1^2+x2^2=3,则p的取值是 有一列数:X1、X2、X3……XN……其中X1等于31 如果对任意的N,有XN+1=2XN.计算X2=( ),X3=( ),X4=( ),根据上面一小题的结果,请试着把XN用N表示出来:XN=( ),计算X6=( ) 已知:方程x^2+px+q=0的两个根为a,b,而a+1和b+1是关于x的方程x^2+qx+p=0的两根,求p,q的值. 已知x1x2是关于一元二次方程x的平方-6x+k=0的俩个实数根,且x1的平方x2的平方-x1x2=115(1)求k的值 (2)求x1的平方+x2的平方+8 的值 设函数f(x)=ax2+bx+c(a>0),且f(1)=-a/2 设x1x2是函数f(x)的两个零点,求|X1-X2|的取值范围 以知关于X的方程 X的平方-pX+qX=0 的两个根是2和-3,求p,q的值. 一元二次方程x2+Px+q=0(如果有实数根)两根的和为? 设函数f(x)=ax2+bx+c(a>0),且f(1)=-a/2,求证函数有两个零点 如果x=3时,代数式px的3次方+qx+1的值为2008,则当x等于-3时px的3次方+qx+1 若关于x的一元二次方程x2+px+1=0的一个实数根的倒数恰是它本身,试求p的值 已知函数f(x)=ax2+bx-1(a,b∈R且a>0)有两个零点,其中一个零点在区间(1,2)内,则a-b的取值范围是A(-1,1) B(-1,+~)C(-2,1)D(-2,+~)答案为B。急需过程,谢谢。 当x=-2时,代数式px的3次方+qx+1的值等于2012,那么当x=2时,代数式px+qx+1的值为多少?错了,当x=-2时,代数式px的3次方+qx+1的值等于2012,那么当x=2时,代数式px的3次方+qx+1的值为多少?四个选项A.2010 B.-201 设x1,x2是方程x^2-x-1=0的两个根,则x1+x2是多少?x1×x2是多少?(韦达定理)抱歉方程打错 X^2-x=2 设函数f(x)={2(x>0),x2+bx+c(x≤0),若f(-4)=f(0),f(-2)=-2,求函数g(x)=f(x)-x的零点的个数.设函数f(x)={2(x>0),x2+bx+c(x≤0),若f(-4)=f(0),f(-2)=-2,求函数g(x)=f(x)-x的零点的个数.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn