作者:帆侮听我悄悄说星星 | 2023-09-01 15:55
"make"不仅对构建编程项目很有用,而且在其他领域似乎还没有得到充分利用.
例如,许多shell脚本可以重写为Makefile,以允许独立的部分并行运行(使用"make -jXX")以保持所有CPU内核的繁忙,并将显式声明的依赖项作为额外的好处,以防万一考虑在shell脚本中重新排序带副作用的一些任务.
你有任何有趣的故事与make/Makefiles的不同寻常的用途分享?您是否使用其他实用程序作为廉价的作业调度程序?
1> 小智..:
Make的并行性对shell脚本特别有用.假设您想获得一整套主机的"正常运行时间"(或基本上执行任何慢速操作).你可以在循环中做到这一点:
cat hosts | while read host; do echo "$host: $(ssh $host uptime)"; done
这有效,但速度很慢.您可以通过生成子shell来并行化:
cat hosts | while read host; do (echo "$host: $(ssh $host uptime)")&; done
但是现在你无法控制你产生的线程数,CTRL-C也不会干净地中断所有线程.
这是Make解决方案:将其保存到文件(例如showuptimes
)并标记为可执行文件:
#!/usr/bin/make -f
hosts:=$(shell cat)
all: ${hosts}
${hosts} %:
@echo "$@: `ssh $@ uptime`"
.PHONY: ${hosts} all
现在运行cat hosts | ./showuptimes
将逐个打印正常运行时间.cat hosts | ./showuptimes -j
将并行运行它们.调用者可以直接控制并行化程度(-j
),也可以通过系统负载(-l
)间接指定它.
Nitpick:"./ showuptimes
推荐阅读
-
如何解决《与std::unordered_map或std::map相比,MFCCMap是否具有良好的性能》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《无法在MySQL5.7中更改字符集(从latin到utf8)》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《使用Django在没有表单(RESTapi)的情况下访问POST字段数据》经验,为你挑选了3个好方法。 ...
[详细]
-
如何解决《Solr不会覆盖-重复的uniqueKey条目》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《ng-click不工作angularJS》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《使用Text::CSV根据变量内容在csv文件上打印一行》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Netty应用程序优化》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何在GO中访问地图值?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《通过sbt插件添加库依赖项-每个子项目》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《PyQtmessageboxyes或nowithif》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Scala-块不能包含声明》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《Datepicker和timepicker-设置最大值和最小值》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《React原生弹性框不使用所有可用空间》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《滑行.缓存到外部存储(SD卡)》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《在JavaScript中,Equalto('=='和'===')之间的区别是什么?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《可以ctest显示googletest控制台颜色》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《AkkaStreams与AkkaHTTPServer和Client》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Django在django-social-auth中出错》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《pythonmatplotlib在x轴上设置年份》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《根据toMap集合中的值过滤流》经验,为你挑选了1个好方法。 ...
[详细]