kafka basic
How to use matplotlib
Matplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. Matplotlib can be used in Python scripts, the Python and IPython shells, the Jupyter notebook, web application servers, and four graphical user interface toolkits.
Matplotlib介绍
Matplotlib 是 python 的绘图库。一副完整的图形(figure)包括标题(title)、坐标轴标题(X&Y axis label)、边框线(spines)、主要刻度线(major tick)、主要刻度线标题(major tick label)、次要刻度线(minor tick)、次要刻度线标题(minor tick label)、图例(legend)、网格线(grid)、线(line)以及标记(marker)等,如下图所示。
IntelliJ IDEA Tips and Tricks
Three weeks ago we announced IntelliJ IDEA Preview and now we are preparing for the release. Hadi Hariri, Developer Advocacy Lead at JetBrains, presented his talk at JavaZone entitled ‘IntelliJ IDEA Tips ans Tricks’ which also includes features from IntelliJ IDEA 15.
CountDownLatch、 CyclicBarrier 与 Semaphore 的比较
java.util.concurrent 中包含了几个能帮助人们管理相互合作的同步工具类,本文介绍了其中的 CountDownLatch、 CyclicBarrier 以及 Semaphore。
CountDownLatch
闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态。CountDownLatch 是一种灵活的闭锁实现,它可以使一个或者多个线程等待一组事件的发生。闭锁状态包括一个计数器,该计数器被初始化为一个正数,表示需要等待的事件数量。countDown 方法递减计数器,表示有一个事件已经发生,而 await 方法等待计数器达到零,这表示需要等待的事情都已经发生。如果计数器的值非零,那么 await 会一直阻塞直到计数器为零,或者等待中的线程中断,或者等待超时。
下面这个例子给出了闭锁的两种常见用法。startLatch 计数器初始值为 1, endLatch 计数器初始值为工作线程的数量。每个工作线程首先要做的就是在 startLatch 上等待,从而确保所有线程都就绪后才开始执行。而每个线程要做的最后一件事情是调用 endLatch 的 countDown 方法,这能使主线程高效的等待直到所有的线程都执行完成。
volatile 关键字和原子类
Java 线程基础
In computer science, concurrency refers to the ability of different parts or units of a program, algorithm, or problem to be executed out-of-order or in partial order, without affecting the final outcome. This allows for parallel execution of the concurrent units, which can significantly improve overall speed of the execution in multi-processor and multi-core systems. In more technical terms, concurrency refers to the decomposability property of a program, algorithm, or problem into order-independent or partially-ordered components or units.
编写正确的程序很难,而编写正确的并发程序则难上加难。线程是 Java 语言不可或缺的重要功能,它们使得复杂的异步代码变得更简单,从而极大地简化了复杂系统的开发。本文主要介绍了线程和线程池的相关知识。
线程和进程
线程和进程的区别是什么?
简单的说,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是 CPU 调度和分派的基本单位,是比进程更小的能独立运行的基本单位。线程的划分尺度小于进程,这使得多线程程序的并发性高;进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。使用多线程的编程通常能够带来更好的性能和用户体验,但是多线程的程序对于其他程序是不友好的,因为它可能占用了更多的 CPU 资源。当然,也不是线程越多,程序的性能就越好,因为线程之间的调度和切换也会浪费 CPU 时间。