线程对性能的影响
随着多核芯片的广泛使用,线程是提升性能的首选方案。适当提升一点线程数会很好;事实上,拥有太多线程可能会使程序陷入困境。过多的线程主要对两个方面有影响:
- 首先,在太多线程之间划分固定数量的工作会使每个线程分到的工作太少,以至于启动和终止线程的开销会影响有用的工作。
- 其次,运行太多线程会因为共享有限硬件资源,从而导致产生过多的开销。
随着多核芯片的广泛使用,线程是提升性能的首选方案。适当提升一点线程数会很好;事实上,拥有太多线程可能会使程序陷入困境。过多的线程主要对两个方面有影响:
split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
本文是学习flink源码前的准备工作。在开始之前,先做好准备工作:
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
先行版本号及版本编译元数据可以加到主版本号.次版本号.修订号 的后面,作为延伸。
生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。
java 的 nio包提供了对文件系统的监控服务,主要使用系统原生文件服务,同时在没有原生服务的时候,使用轮询来监控。下面是一个代码示例:
String path = "/tmp";
// 获取当前OS平台下的文件系统监控器
WatchService watcher = FileSystems.getDefault().newWatchService();
//将监控器注册给指定的文件节点,该方法会让监控器线程就绪并运行,调用完后监控器就开始监控
/* 文件变化枚举类型
* ENTRY_CREATE:创建
* ENTRY_DELETE:删除
* ENTRY_MODIFY:修改
*/
Paths.get(path).register(watcher,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
while (true) {
WatchKey key = watcher.take();
// 获得WatchKey(监控池)中的具体监控信息,
// !!! 一个文件变化动作可能会引发一系列的事件,因此WatchKey中保存着一个事件列表List<WatchEvent<?>> list
for (WatchEvent<?> event: key.pollEvents()) {
System.out.println(event.context() + " comes to " + event.kind());
}
// 完成一次监控就需要重置监控器一次.
boolean valid = key.reset();
if (!valid) {
break;
}
}
// ---------- output --------------
// tmp.log comes to ENTRY_DELETEAOP Alliance 项目是许多对Aop和java有浓厚兴趣的软件开发人员联合成立的开源项目,旨在确定Aop的标准。面向切面编程是设计和开发应用程序的一个好方案,AOP 提供了一种通用方法来构建关注点(横切关注点),并将它们灵活地作为模块插入应用。但是,也带来了问题: 不同的AOP实现并不能适配所有环境。
大多数人不相信完美系统,我们认为一个系统总是能处理给定的一个问题和环境(不需要适配其他)。现在已经有了很多的AOP实现或AOP相关的技术,例如,通用代理,拦截器或字节码翻译工具。具体如下:
对我们而言,这些实现没有好与坏的区别,都适合于某些问题或环境。AOP Alliance的目的不是提出新的AOP模型,也不是提供一个更好的AOP实现来解决所有场景的问题。其目的在于提炼所有AOP实现的共同核心能力:
一些常用的shell 脚本和snippets。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。Linux 的 Shell 种类众多,常见的有:
由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
之前有听说过 java 8 的 lambda 实现不再是java 1.5的匿名内部类语法糖。今天刚好有时间看看:
public class App {
@FunctionalInterface
public interface LambdaDemo{
public void runLambda();
}
public static void doSomething(LambdaDemo demo){
demo.runLambda();
}
public static void main(String[] args) {
doSomething(()->System.out.println("hello world!"));
}
}