node.js是单线程。好处就是1)简单2)高性能,避免了频繁的线程切换开销3)占用资源小,因为是单线程,在大负荷情况下,对内存占用仍然很低3)线程安全,没有加锁、解锁、死锁这些问题坏处就是如何解决高并发?node使用异步IO和事件驱动(回调函数)来解决这个问题。一般来说,高并发解决方案会提供多线程模型,为每个业务逻辑配备一个线程,通过系统线程切换来来弥补同步I/O调用的时间开销。而node.js...
分类:
Web程序 时间:
2014-12-16 21:05:23
阅读次数:
281
synchronized(ThreadTest.class)是对ThreadTest这个类进行加锁,类里面的属性,方法都是同步的,是针对于特定的类的~~synchronized(this){}是对{}这里面的内容进行加锁的,仅仅是针对于当前对象的
分类:
其他好文 时间:
2014-12-16 20:55:06
阅读次数:
221
在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现分布式锁机制。...
分类:
其他好文 时间:
2014-12-12 16:39:40
阅读次数:
203
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据概述编辑如果你的代码所在的进程中有多个线...
分类:
编程语言 时间:
2014-12-11 19:05:48
阅读次数:
165
共享锁(S锁)又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。排他锁(X锁)又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,...
分类:
其他好文 时间:
2014-12-08 21:02:58
阅读次数:
209
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。先回顾一下一个常识:1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationE...
分类:
其他好文 时间:
2014-12-07 21:34:13
阅读次数:
182
在SQL Server数据库中加锁时,除了可以对不同的资源加锁,还可以使用不同程度的加锁方式,即锁有多种模式,SQL Server中锁模式包括:1.共享锁 SQL Server中,共享锁用于所有的只读数据操作。共享锁是非独占的,允许多个并发事务读取其锁定的资源。默认情况下,数据被读取后,SQL Se...
分类:
数据库 时间:
2014-12-03 11:54:31
阅读次数:
251
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等...
分类:
编程语言 时间:
2014-12-02 22:08:37
阅读次数:
227
背景:最近在做一个项目,程序是命令行程序,在主程序中开一个线程,这个线程用到了System.Timer类的Elapsed事件,根据指定时间间隔循环去查询数据库,找符合条件的记录,把记录组织成xml对象发送到MSMQ中去。刚一开始的时候数据量小,在时间间隔内可以查询所有的记录并发送到MSMQ,随着业务...
分类:
其他好文 时间:
2014-12-02 22:04:25
阅读次数:
207
多个线程对共同数据的访问的实现,要根据情况而定(1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做。或者这个共享数据封装在一个对象当中,然后对这个对象加锁,也可以实现数据安全访问。(2)当各个线程访问的代码不同时:这时候...
分类:
编程语言 时间:
2014-11-30 18:41:59
阅读次数:
111