答案
并发
具体实践
并发编译
make的操作,加入-j,编译速度会非常快!
-s是安静的意思,只打印告警信息,这样也能微弱加速。
make -sj
注意,除了编译代码,在测试和代码检查中,凡是会用到make的,都可以加速-j,会有效果
并发shell
看过很多人的脚本,都是一个个测试用例在编译,伪码如下:
for i in xx; do
compile yy
done
实际上,这是一个串联操作,测试用例是不需要串行的。
采用& 和 wait来实现并发
for i in xx; do
compile yy &
done
wait
这样,各个测试用例就可以并发编译了。
它的意思是:
每个compile yy都变成后台运行进程,这样就可以立马执行下一个任务。
wait是会等待所有的后台进程全部完成后,才会继续。
这里只是拿测试用例进行举例,该思想应用面很广
并发CI
这里以CI pipeline为例。
pipeline是支持parallel并发模式的。
在一个stage内部,可以实现两种并发,parallel是可以嵌套的:
- node的并发
- node内部的不同任务的并发
Jenkinsfile示例如下:
#!groovy
stage ('check')
{
parallel (
"fortify": {
node("JenkinsServer"){
checkout scm
sh "xxxx"
}
},
"lightweigh_check": {
node("mesos"){
checkout scm
parallel(
"doxygen": {
sh 'cd ${SRC_PATH} && make doc 1>/dev/null 2>${WORKSPACE}/makedoc.warning \
&& cat ${WORKSPACE}/makedoc.warning \
&& if test -s ${WORKSPACE}/makedoc.warning; then exit 1; else exit 0; fi'
},
//ccn check
"ccn average": {
sh 'lizard ${SRC_PATH} --xml > ${WORKSPACE}/ccn.xml'
sh 'python ${SCRIPT}/check/ccn_average.py'
}
)
}
}
)
}
其他好工具
time
运行脚本时,用time执行
time xxx.sh
会显示执行脚本的时间,方便评估并发效果