make -jN
今天又一次尝试编译安卓,想测试一下编译的速度如何?
考虑机器是4核8线程,就用上了 make -j8,感觉上上速度是很快,刷屏就下来了,不过错误了,错误的提示大概是某个文件的规则没找到,想想了多线程并发执行会不会涉及到同步的问题,于是就有了这篇。
尴尬的clear掉没用的东西,因为发现继续make竟然重新开始了。最后用了 make -j4重新试了试,结果没有任何异常。
首先,从CPU的核心数想这个问题,我用的虚拟机来编译的,分了4个核给虚拟机,发现window下cpu的占用率始终是50%上下波动。最后发现windows认为我的cpu是8核的,这就是inter cpu牛的地方吗?
从这里想到编程之美上的一道题目,如果让cpu使用率50%的状态,那么让半数线程满载运行也行?或者是用定时器让每个核心以50%的时间工作在while()之下,另外一半时间调用idle(),总之感觉上可行,有时间不妨来试试。
这里就明白了一个现象,window能识别出来的核心数,和分配给虚拟机核心数之间的关系。
这样 make -j8 就是让8个线程让4个核心竞争的执行,(只考虑相关的线程),make -j4 就是4个线程然竞争4个核心。
这样同步的问题第一种情况会明显比第二种情况激烈,出错也是有很大可能的。
不过,应该更关注make 多线程编译怎样避免出错的问题? 首先很明显多线程能提交编译速度,但是如果不处理好依赖关系就会造成编译出错的问题。
如果依赖问题没有处理好,就只能单线程这样避免编译出错。如果依赖关系设置过于保守,则可能本身编译的可并行度就下降了,也不能取得最佳的效果,总之还有一个平衡的问题。
最后也没找到特别合适的出错的原因,只好归咎于多线程竞争吧
make -jN的更多相关文章
- leetcode322—Coin Change
You are given coins of different denominations and a total amount of money amount. Write a function ...
- r语言笔记 jn
get_range <- function(data_name , row_name){ library(stringr) load(data_name) data_str <- str_ ...
- Hive安装配置指北(含Hive Metastore详解)
个人主页: http://www.linbingdong.com 本文介绍Hive安装配置的整个过程,包括MySQL.Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区 ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- Lind.DDD.LindMQ~关于持久化到Redis的消息格式
回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...
- Android Studio开发RecyclerView遇到的各种问题以及解决(一)
以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
- iOS 原生地图地理编码与反地理编码
当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...
随机推荐
- UIDynamic物理仿真
UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象, 比如重力.弹性碰撞等现象,UIKit动力具有可组合.可重用和声明式 ...
- The first to Python
今天在51cto购买了python教程,今后在这里记录我python的点点滴滴,感谢博客园给予的平台,感谢51cto给予的机会,感谢导师.
- GitHub上有很多不错的iOS开源项目
GitHub上有很多不错的iOS开源项目,个人认为不错的,有这么几个:1. ReactiveCocoa:ReactiveCocoa/ReactiveCocoa · GitHub:GitHub自家的函数 ...
- jail brak 获取当前安装app列表
ios 5 6 7 可以通过解析"/private/var/mobile/Library/Caches/com.app.mobile.installation.plist" 文件获 ...
- H5加载优化
- java 常用的三大集合类
一.Set集合.其主要实现类有HashSet.TreeSet.存放对象的引用,不允许有重复对象. 代码: public class SetTest { public static void main( ...
- RPC框架基本原理(一):服务注册
什么是RPC框架 RPC整个过程涉及四类对象:客户端.客户端代理.服务端和服务端代理.RPC要求客户端和服务端之间约定好调用接口和传输格式(如JSON,Xml等),客户端在调用该接口时,由客户端的代理 ...
- 理解 php 中& 引用
php中引用&的真正理解-变量引用.函数引用.对象引用 php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没 ...
- java中list集合的内容,如何使用像数据库中group by形式那样排序
java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name mone ...
- HDU2523:SORT AGAIN
Problem Description 给你N个整数,x1,x2...xn,任取两个整数组合得到|xi-xj|,(0<i,j<=N,i!=j). 现在请你计算第K大的组合数是哪个(一个组合 ...