`
whitesock
  • 浏览: 478493 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论
文章列表
Linux Kernel支持atomic bit operation。一个有意思的问题是:为什么有必要保证位操作的原子性?原因在于它会确保每次操作一定生效。例如对某个位进行两次操作,分别是设置0和1,那么这两次操作都会被执行,而不会被优化成一次性设置1。这在概念上有点类似epoll的edge trigger 和 level trigger。此外在Java SE中,由于伪唤醒的存在,我们都会在一个循环里check condition和wait。但是在被唤醒和下次check的时间间隔内,condition可能再次发生变化,从而导致错过相应的事件。为了实现edge trigger,我们只能是自己实现一 ...
A Hierarchical CLH Queue Lock (Victor Luchangco, Daniel Nussbaum, Nir Shavit) 这篇论文值得仔细推敲,虽然未必适合在Java中实际应用,但是至少提供了一种思路。
Inside AbstractQueuedSynchronizer (1) Inside AbstractQueuedSynchronizer (2) Inside AbstractQueuedSynchronizer (3) Inside AbstractQueuedSynchronizer (4)   3.6 ConditionObject     AbstractQueuedSynchronizer的内部类ConditionObject实现了Condition接口。Condition接口提供 ...
Inside AbstractQueuedSynchronizer (1) Inside AbstractQueuedSynchronizer (2) Inside AbstractQueuedSynchronizer (3) Inside AbstractQueuedSynchronizer (4)   3.4 Template Method     AbstractQueuedSynchronizer提供了以下几个protected方法用于子类改写 protected boolean tryAcquire(int arg) protected boolea ...
Inside AbstractQueuedSynchronizer (1) Inside AbstractQueuedSynchronizer (2) Inside AbstractQueuedSynchronizer (3) Inside AbstractQueuedSynchronizer (4)   3 AbstractQueuedSynchronizer   3.1 Inheritance     AbstractQueuedSynchronizer继承自AbstractOwnableSynchronizer。AbstractOwnableSync ...
Inside AbstractQueuedSynchronizer (1) Inside AbstractQueuedSynchronizer (2) Inside AbstractQueuedSynchronizer (3) Inside AbstractQueuedSynchronizer (4)   1 Overview     如果查看ReentrantLock,CountDownLatch,Semaphore,FutureTask,ThreadPoolExecutor的源码,都会发 ...
1 Tables CREATE TABLE ta (id int(11) NOT NULL, name varchar(20) DEFAULT NULL, PRIMARY KEY (id)) ENGINE=InnoDB; CREATE TABLE tb (id int(11) NOT NULL, name varchar(20) DEFAULT NULL, PRIMARY KEY (id)) ENGINE=MyISAM;   2 @@binlog_format=STATEMENT 2.1 set @@binlog_format=STATEMENT; start tra ...
关于MySQL的AUTO_INCREMENT列出现不连续的原因,本文列出了几个比较常见的场景。MySQL 5.1.42, InnoDB Plugin 1.0.6, innodb_autoinc_lock_mode = 1   Scenario 1 CREATE TABLE test(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10)) ENGINE=InnoDB; START TRANSACTION; INSERT INTO test VALUES(NULL, '1'); ROLLBACK; INSERT INTO test ...
Open Replicator ( http://code.google.com/p/open-replicator/ ) 开源了。Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析binlog,最终将分析得出的binlog events以回调的方式通知应用。Open Replicator可以被应用到MySQL数据变化的实时推送,多Master到单Slave的数据同步等多种应用场景。目前的这个最初版本,是笔者用 了大概两周的业余时间 ...
1  Symmetric Coroutine     Lua支持asymmetric coroutine。对于symmetric coroutine,名为Coroutines in Lua的一篇论文,提供了如下的解决方案: coro = {} coro.main = function() end coro.current = coro.main function coro.create(f) return coroutine.wrap(function(val) return nil, f(val) end) end function coro.transfer ...
当前开发人员在进行编码的时候,可能很少关注纯粹代码级别的优化了。关于优化,或许很多人会说不要过早地进行优化。从某种程度上来说,笔者也认同这个观点。但是当明确了优化对象的时候,我们都有哪些办法呢?以下是几个代码优化的简单例子。   1 Sample 1 public class LoopPerf { public static double add1(double array[]) { double sum = 0; final int length = array.length; for(int i = 0; ...
sed '/^\s*$/d' a.txt # delete ALL blank lines sed '/./,$!d' a.txt # delete all leading blank lines at top of file   sed '=' a.txt | sed 'N;s/\n/\t/' # cat -n a.txt sed '/./=' a.txt | sed '/./N; s/\n/\t/' # number each not blank line of file   sed '1!G;h;$!d' a.txt # reverse order of lines se ...
1 Nothing 是trait,定义为:final trait Nothing extends Any。Nothing处于Scala类型体系的最底层,是所有类型的子类型,Nothing没有实例。   2 Null 是trait,定义为:final trait Null extends AnyRef 。Null是所有引用类型的子类型,唯一的一个实例是null。   3 Nil 是case object,定义为case object Nil extends List[Nothing], 代表一个空list。由于Scala中的List是协变的,因此无论T是何种类型,Nil都是List[T]的 ...

On Top of Tides

还在公司,估计要到天亮。虽说是在加班,但基本上是在DJY,一口气读完了浪潮之巅。
1 Overview       在分布式系统中,通常会避免使用分布式锁。然而在某些场景下,还是存在对分布式锁的需求。跟普通锁相比,分布式锁面需要对的问题更多,例如怎样保证某个进程在持有锁时意外终止之后,其它进程也能够正常地获得锁等等。笔者认为一个比较好的分布式锁实现是Terracotta,但是这不是本文的重点,感兴趣的读者可以参考笔者的Terracotta in Action 系列文章(http://whitesock.iteye.com/blog/351780 , http://whitesock.iteye.com/blog/352876 , http://whitesock.i ...
Global site tag (gtag.js) - Google Analytics