当前位置:首页 » 安卓系统 » android多核

android多核

发布时间: 2022-05-28 06:10:47

A. 随笔之如何判断Android应用进程是否为单线程及闲扯多核并行编程

我最早接触多核知识是2008年末到2009年初。背景很简单,我是做高性能网络数据传输服务器的,类似FTPServer一样。服务器的吞吐能力最好是随着CPU核数的增加成倍增长.。根据多核并行的知识,这是最理想的情况(有一个公式,可以计算性能和CPU核数的关系),但应用内部各个线程并非完全独立。即线程是独立运行在不同CPU核上,但是线程中所干的事情却在逻辑上有关系。例如运行在线程A上的函数等待运行在线程B上另外一个函数的执行结果。这样就导致性能不是随CPU核数线性增长。 根据上面的介绍,对于多核并行编程来说,最最重要的事情就是将你的应用中那些混淆不清的逻辑关系能拆成互不干扰或者互相牵连较少的模块,并让他们在不同线程上运行。这样就真正发挥多核的优势了。 1 对于纯逻辑关系的问题,也就是非计算方面(即矩阵计算,编解码等),要想能掰叱清楚。难度很大。七大姑,八大姨的,能分那么清楚吗?目前,这方面的资料较少。 2 对于纯计算方面的问题,例如矩阵计算,要研究的就不是编码,而是数学,要把计算拆成各个小块,每个小块可单独运行在独立线程上,然后再汇总计算结果。这方面资料较多,如周伟明的《多核计算与程序设计》。编程角度看,OpenMP是一个多核并行计算的好库。(有人能尝试下用OpenMP来拆分逻辑工作吗?) 好了。多核的故事闲扯到这,对于纯逻辑关系问题,再扯的话就会扯到线程池,并发编程,异步IO,惊群效应,分布式内存管理等等等等。 下面来看如何判断Android应用进程为单线程还是多线程?请先思考,再看下面的答案:1android应用是运行在android环境中的,简单来说,是运行在dalvik虚拟机之上,而dalvik虚拟机本身是会创建一些线程,例如垃圾回收线程,JDWP调试线程2Android应用会经常利用binder和系统服务进行IPC通信,根据binder本身的特性,它会动态创建线程来完成外界请求。 以上两类线程都是应用不可控的,保守估计,这类不可控线程至少在3个左右3除了主线程之外的,就是应用自己是否会创建线程了。 查看一个进程中线程的方法有: ps,加一些参数(具体忘记了),可看某个进程下的线程及线程号,但无法区别是系统创建的线程还是应用自己创建的线程 kill -3 对应进程pid,这个方法会向进程发送SIGQUIT消息,dalvik虚拟机会跟踪这个信号,并打印该进程所有线程的堆栈到一个文件 native代码(如Jni库)如果直接调用posix创建线程,则上述方法无法跟踪(如果该线程能回调到Java层,也可以获取信息),只能根据ps得到的信息,减去SIGQUIT得到的信息来判断了。不过这类线程一般都是应用自己创建的。

B. android获取手机cpu是单核还是多核的方法

android的Cpu信息是存在/sys/devices/system/cpu中的,在目录中,我们可以看到存在多个文件,一个文件就是一核Cpu的信息。上面写有cpu0,cpu1,cup3诸如此类的文件夹。要获得它是几核的Cpu,只要读取一下那个cpu目录下有几个cpu+数字的文件夹就可以了。/** * Gets the number of cores available in this device, across all processors. * Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu" * @return The number of cores, or 1 if failed to get result */private int getNumCores() { //Private Class to display only CPU devices in the directory listing class CpuFilter implements FileFilter { @Override public boolean accept(File pathname) { //Check if filename is "cpu", followed by a single digit number if(Pattern.matches("cpu[0-9]", pathname.getName())) { return true; } return false; } } try { //Get directory containing CPU info File dir = new File("/sys/devices/system/cpu/"); //Filter to only list the devices we care about File[] files = dir.listFiles(new CpuFilter()); //Return the number of cores (virtual CPU devices) return files.length; } catch(Exception e) { //Default to return 1 core return 1; }}

C. 为什么安卓的机子在性能上很难超过苹果的还多核什么的

虽然很多Android手机的配置都比iPhone要高,比如大多数Andorid手机的内存都有1GB,而iPhone 4S只有512MB内存,但用过iPhone的人都知道Android手机在使用的时候总感觉没有那么顺滑,究竟为什么会出现这种现象呢?一位软件工程师和前Google实习生Andrew Munn解释说是因为Android系统UI效率低下的框架设计的问题。
不过,这个实习生Andrew Munn是一个软件工程专业的本科毕业生,他在Android团队并没有在框架团队工作,也没有看过Android渲染的源代码,因此他所说的未必是100%准确。并且他也曾经在Windows Phone团队工作过,因此可能会不自觉的对Android产生偏见。以下就是他对Android为什么没有iOS流畅体验的看法。
Android没有iOS流畅的原因并非Java GC导致暂停,也不是因为Android运行的是Java编译的bytecode而iOS运行的native code,根本的原因是,iOS的UI渲染采用实时优先级,而Android的UI渲染遵循传统电脑模式的主线程普通优先级。
这听起来似乎很抽象和难以理解,但大家可以尝试一下,使用你的iPad或者iPhone,打开Safari,然后加载一个复杂的网页,例如新浪网首页,当网页加载到一半的时候,把你的手指放在屏幕上,并且四处移动,你会发现所有的渲染立刻停止,在你拿开手指前,网页永远也不会继续加载。
而在Android设备上重复这个操作,你会发现,浏览器会继续尝试加载页面并渲染HTML,试图多任务同时进行,因此对于Android来说,一个高效的双核处理器是很重要的,这也就是Galaxy S II能够非常平滑的原因。
在iOS中UI渲染过程具有绝对的优先等级,当用户接触到iPhone的触摸屏后,iOS中所有的进程都将停止,UI线程拦截了所有的事件,系统会将所有资源用于渲染UI过程,以保证用户界面的实时渲染优先级。而在Android系统中UI渲染过程的优先级别却没有那么高,也就是说当你触摸Android手机屏幕的时候,系统后台的程序并没有停止,仍然在继续运行之中,比如下载和查收短信,这样系统UI获得的资源就不够,这就是Android系统不流畅的原因。
由于这个原因,新发布的Galaxy Nexus,甚至配备四核处理器的话说EeePad Transformer Prime平板电脑都无法保证顺滑的操作体验,这些设备只能与3年前的iPhone顺滑程度相比,那么Android团队为什么不从根本解决这个问题呢?
除了UI渲染之外,Android缺乏有效的的硬件加速也是一个原因,在不同的Android手机上的硬件加速存在巨大差异,而苹果是唯一一个既做硬件又做软件的手持设备公司,只有苹果可以在硬件中插入对软件的优化,使得基于苹果芯片的设备不仅省电,而且流畅。
实际上,Android的开发工作在第一代iPhone发布之前就已经开始了,原始Android原型体被设计成为使用键盘手机的设备,也就是黑莓手机的竞争对手。UI渲染优先级别在有键盘的手机上并没有那么重要。但是在iPhone发布之后,Android小组为了快速推出能与iPhone竞争的产品,迅速将Android改成触摸屏手机系统,但那时重写UI框架已经不可能了。因为如果这样Android应用市场中的所有程序将变得不可用,这种关系将一直处于恶性循环之中。
(这个实习生的伪科学真是编的好,在此反驳)
按照那个实习生的说法,android的ui不流畅是因为响应UI处理的优先级不够,而google不改进的原因是因为怕影响到已经发布的应用程序?
这人根本不懂ios和android的进程控制机制,且不说ios中ui有最高优先级(笑啊,ios什么时候UI有最高级了,明明是系统中断才是最高),竟然说出了android触摸UI时后台进程保持运行这样的荒谬的事情,我都怀疑他是不是在google呆过。 即便他说的UI优先级有理,也不可能出现改变优先级就会使得程序进入恶性循环这种情况。了解android系统架构应该知道负责图形处理(关于优先级部分)的是位于android系统的倒数第二层,也就是内核的上一级,而且android的设计是层与层之前低耦合的,每层对于下一层的依赖仅通过接口来调用,而层内的变化根本不会影响到层外行为。
说简单一点,就如同你去银行柜台办事,你办外汇就去外汇窗口,债券就去债券窗口,而银行内部怎么处理你的请求是他们的事,你只需要提交你的数据并接收结果即可,银行内部员工变动也不会影响你的事务办理。如果真如这个实习生所说,是UI框架处理优先级的问题,google大可以轻轻松松直接提高优先级,绝不会影响到现有任何程序,因为目前没有任何程序能绕过android的程序框架直接调用到UI下层的方法,因此下层的改进也不会对上层造成兼容性的不适。而且也不增加什么生产成本。
但为什么还是感觉android比ios卡?我觉得这是人云亦云后的“被变卡”感觉(很多人在概念空白时先入为主的被教唆到android比ios卡,不如ios,而且听多了这样的话后自然自己的感觉就不准了),以至于出现了N种关于android为什么不如ios的“科学、内幕”解释。我觉得除了辩证还要用发展的眼光来分析这个问题。
在早期,android的优化的确不如ios,这源自于产品的设计理念和年代(android本身是07年才被收购的一个公司,之前这个系统根本没有得到实际的验证,而ios始终是在apple下从mac时代起就被打造的)。而硬件也远没有iphone强,加上开放免费,什么鱼龙混杂的制造商都加入进来,元器件供应商也是水很深,造成产品水平参差不齐。很多人对android和ios的差距的认识也是从那时才建立的,而看iphone,一年才出一款机器,无论软件还是硬件,从选择供应商到制作,有足够的周期,都是精挑细琢。也就是说,android阵营从低端到高端都有,且低端又多又乱所谓的高端少而不精,而iphone就一个高端,这就如田忌赛马,老拿人家优秀的比垃圾的,自然而然口碑也就落成了android不如ios的一个大范围印象。其实这个时代跟ios产品比较,也的确是android的东西不如iphone做得好。
但是近年来android的机器硬件基本上已经超过了iphone但为什么还是觉得比ios卡?除了上述的心理因素遗留之外,我个人觉得其实这无关android本身,并不是os优化这么简单的事。而是硬件问题,其实没有人特别在意这个问题,但是我想说这就如同显示器的响应时间,响应时间快,在播放时就会流畅没有拖影。
电容屏也有响应时间,而且对工作环境电压要求很高,普通的电容板本身响应就比较慢,大概才50~100ms,而且在电压不稳定时反应更慢,而iphone4的电容板响应时间在10~20ms,差距近80ms说是不到十分之一秒,但是在实际体验时这就能影响到人们的直觉。另一个因素在于触屏的玻璃材质,硬度越高越顺滑,这是根据阻尼系数和摩擦系数可以测出的。同是镜面的情况下,硬度越高的材质在摸上去的时候更顺滑。iphone用的是大猩猩,硬度达到7,裸身时本身触感就顺滑,没有拖沓感,再加上大多数买iphone的人贴膜都会比较下本钱(我贴膜花了129),贴膜也会影响到触感。在普观android手机,用上大猩猩的寥寥无几,再肯贴好膜的更是少。在手感上也比iphone要差了。
就我个人长久使用亲身体会是,android的UI其实缺少过度动画,比如在界面切换时的细节(仔细看,ios的界面切换时除了窗口会移动,标题栏和上面的控件都会以不同的速率在移动,感觉很动感精致,如同流水般),这样在操作时造成了突兀感。实际上从触摸角度来讲,我觉得兔子没有明显的差异。而且明显的感觉是,如果iphone有后台程序,或者运行过较多程序之后,哪怕是普通的界面切换也会有卡顿感觉,很明显的。
最后一点重要的补充就是iOS是伪多线程开发,Android更注重编程模型,iOS更注重用户体验。Android将应用内(进程内)渲染(controls)和进程间渲染(surface flinger)放在了不同的模块、空间,导致动画时线程切换过于频繁,需要更高的性能的芯片才能达到和iOS相同的效果;要配合渲染也变得很复杂,所以在横竖屏切换时没有像iOS那样的转屏动画。

D. 安卓4.2系统是否能有效支持多核CPU

安卓4.2可以支持多核CPU
android 4.2系统十大特性:
1、完整的Chrome浏览器
Android 4.2的Web浏览器的变化将非常受欢迎,支持选项卡浏览系统以及书签同步。这样的设计为了使手机和平板电脑的使用和传统PC使用无异。
2、全新的手机风景模式
作为Android 4.2,将集合手机以及平板电脑一体,在使用手机时,可以使用类似于平板电脑尺寸的风景模式,并且可以进行反转。
3、全新的文件管理器
Android 4.2将集合一个全新的文件管理器,使用户可以方便的管理SD卡上的文件,而不再依赖于第三方软件。
4、文本输入选项的改进
Android 4.2重新设计了键盘的布局,甚至将无用的数字和符号都一并略去了。
5、一个明确的升级方法
Google似乎已经对升级操作系统后产生的各种混乱场景感到非常厌倦,因此在5月份发布的升级,Google必须保证硬件方面足够指标才能升级操作系统。希望这次Android 4.2新版的系统中,对于硬件方面的要求不再是个问题,这将使得所有用户可以使用新的Android版本。
6、Android Key Lime Pie精简版
这个版本有点像Windows XP的上网本,拥有大部分功能,但是对于硬件要求稍低。
7、具有开关切换的用户界面
众多Android生产厂商都会自定义Android,帮助手机更好的服务使用者。但与此同时,如果能停用某些用户界面,而恢复到标准的Android将是一个不错的功能。
8、全新的电源管理系统
全新的电源管理系统将有效的分配电池的合理使用,例如牺牲浏览下滑页面的速度而因此获得20分钟发短信息的时间。
9、更为轻便的主题模式
Android 4.2是漂亮的,不只是黑色背景上的白色文字。当然,我们可以使用不同的图片作为背景。
10、全新的锁屏页面
当进入锁屏页面时,Google已经试图放入一些有关来电和消息的信息。虽然这样做未免会有一些安全风险,但Android应该能人为的控制开关这个功能。

E. android多核,多线程该如何用

在程序开发的实践当中,为了让程序表现得更加流畅,我们肯定会需要使用到多线程来提升程序的并发执行性能。但是编写多线程并发的代码一直以来都是一个相对棘手的问题,所以想要获得更佳的程序性能,我们非常有必要掌握多线程并发编程的基础技能。
众所周知,Android 程序的大多数代码操作都必须执行在主线程,例如系统事件(例如设备屏幕发生旋转),输入事件(例如用户点击滑动等),程序回调服务,UI 绘制以及闹钟事件等等。那么我们在上述事件或者方法中插入的代码也将执行在主线程。

一旦我们在主线程里面添加了操作复杂的代码,这些代码就很可能阻碍主线程去响应点击/滑动事件,阻碍主线程的 UI 绘制等等。我们知道,为了让屏幕的刷新帧率达到 60fps,我们需要确保 16ms 内完成单次刷新的操作。一旦我们在主线程里面执行的任务过于繁重就可能导致接收到刷新信号的时候因为资源被占用而无法完成这次刷新操作,这样就会产生掉帧的现象,刷新帧率自然也就跟着下降了(一旦刷新帧率降到 20fps 左右,用户就可以明显感知到卡顿不流畅了)。

为了避免上面提到的掉帧问题,我们需要使用多线程的技术方案,把那些操作复杂的任务移动到其他线程当中执行,这样就不容易阻塞主线程的操作,也就减小了出现掉帧的可能性。

那么问题来了,为主线程减轻负的多线程方案有哪些呢?这些方案分别适合在什么场景下使用?Android 系统为我们提供了若干组工具类来帮助解决这个问题。
AsyncTask: 为 UI 线程与工作线程之间进行快速的切换提供一种简单便捷的机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的使用场景。
HandlerThread: 为某些回调方法或者等待某些任务的执行设置一个专属的线程,并提供线程任务的调度机制。
ThreadPool: 把任务分解成不同的单元,分发到各个不同的线程上,进行同时并发处理。
IntentService: 适合于执行由 UI 触发的后台 Service 任务,并可以把后台任务执行的情况通过一定的机制反馈给 UI。
了解这些系统提供的多线程工具类分别适合在什么场景下,可以帮助我们选择合适的解决方案,避免出现不可预期的麻烦。虽然使用多线程可以提高程序的并发量,但是我们需要特别注意因为引入多线程而可能伴随而来的内存问题。举个例子,在 Activity 内部定义的一个 AsyncTask,它属于一个内部类,该类本身和外面的 Activity 是有引用关系的,如果 Activity 要销毁的时候,AsyncTask 还仍然在运行,这会导致 Activity 没有办法完全释放,从而引发内存泄漏。所以说,多线程是提升程序性能的有效手段之一,但是使用多线程却需要十分谨慎小心,如果不了解背后的执行机制以及使用的注意事项,很可能引起严重的问题。

F. 打开一个app需要多核吗

安卓打开一个app需要八核差不多。
(6)android多核扩展阅读:手机软件,主要指安装在智能手机上的软件,完善原始系统的不足与个性化。使手机完善其功能,为用户提供更丰富的使用体验的主要手段。手机软件的运行需要有相应的手机系统,市场常用的手机系统:苹果公司的iOS、谷歌公司的Android(安卓)系统、塞班平台和微软平台。
智能手机,是指像个人电脑一样,具有独立的操作系统、独立的运行空间,可以由用户自行安装软件、游戏、导航等第三方服务商提供的程序,并可以通过移动通讯网络来实现无线网络接入手机类型的总称。
随着智能手机的普及,人们在沟通、社交、娱乐等活动中越来越依赖于手机app软件(app,英文application的简称,即应用软件,通常是指iPhone、安卓等手机应用软件)。手机软件是通过分析,设计,编码,生成软件,而手机软件是一种特殊的软件。

G. android针对多核做优化了吗

目前应该没有,,,因为大部分的手机应用使用两个核心,,用不到第三个核心,,

H. 为什么安卓手机CPU一般都是8核心

目前来说,安卓手机的CPU一般都是采用八核心设计的。

之所以会出现不同厂家、不同型号的手机CPU都采用八核心设计的现象,是因为以下几方面原因:

1、软件对于硬件性能的要求。

2、硬件设计的能力。

3、芯片生产的能力。

事实上,手机CPU并不是天生就有八核心的。……今天的手机CPU,是经过不断的技术发展,从最初的状态一点一点升级上来的。

早期的手机,采用的是模拟信号,其CPU设计也非常简单。

后来,有了数字技术的加持,手机的发展开始走进快车道。直到出现了智能手机。

早期的手机,其功能仅限于打电话、发信息。

后来,手机的功能日益丰富,最终发展出智能手机,成为人们日常生活中不可缺少的工具。

到了这时候,手机软件对于硬件的性能要求就越来越高了,于是,手机CPU的发展速度也就更快了。

由于CPU采用的超大规模集成电路的设计和生产受到技术条件的限制,不可能无限提升性能,于是,多核心CPU就开始出现……逐步发展,就有了今天的八核心CPU……

事实上,CPU当然不止能做成八核心……六核心乃至更多的核心都是完全可以做得到的……但是在目前技术条件下,八核心是性价比最高的选择,于是,各个厂家就都把八核心cpu当做目前的重点来进行研发和生产了……

I. 安卓系统到底支不支持多核,大手们解释一下

支持,现在都已经有相关的产品的,肯定是支撑的。
可是由于现在安卓系统的发展下,暂时还是没有跟上硬件的发展,现在单核和双核,甚至是四核的,实际上是没有具体感受上的差别。(优化好的话)
现在也没用特别为双核四核开发的应用游戏,因此单核和双核四核差距只能在一下跑分软件上分别。

J. Android中,多核处理与单核多任务处理的实质是什么

每个运行在线程中的任务都可以分解成多条指令,而且这些指令不用同时执行。所以,单核设备可以首先切换到线程1去执行指令1A,然后切换到线程2去执行指令2A,接着返回到线程1再去执行1B、1C、1D,然后继续切换到线程2,执行2B、2C等等,以此类推。
这个线程之间的切换十分迅速,以至于在单核的设备中也会发生。几乎所有的线程都在相同的时间内进行任务处理。其实,这都是因为速度太快造成的假象,就像电影《黑客帝国》里的特工Brown一样,可以变幻出很多的头和手。

热点内容
算法间性 发布:2025-08-21 13:31:31 浏览:643
云物理服务器物理服务器 发布:2025-08-21 13:29:54 浏览:110
促销升级源码 发布:2025-08-21 13:20:39 浏览:68
各大数据库 发布:2025-08-21 13:13:53 浏览:810
设计图库加密 发布:2025-08-21 13:06:38 浏览:515
索引存储是数据的存储方式么 发布:2025-08-21 13:05:31 浏览:506
我的世界大型服务器ip大全 发布:2025-08-21 12:54:23 浏览:578
htcandroidl 发布:2025-08-21 12:50:59 浏览:963
编程拳皇 发布:2025-08-21 12:50:57 浏览:330
sqlserver2005作业 发布:2025-08-21 12:15:25 浏览:325