注:本篇博客主要内容来源于网络,侵删~ 引言 我们假设你已经熟练掌握了CAS,原子变量类等的相关概念。这篇博客中,我们主要讨论原子变量类的使用。 原子变量类 原子变量类共12个,分4组: 计数器:AtomicInteger,AtomicLong,AtomicBoolean,AtomicReference。 域更新器:AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUpdater。 数组:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray。 复合变量:AtomicMarkableReference,AtomicStampedReference。 在每组中我会选择其中一个较有代表性的进行分析与举例。 AtomicReference 使用说明 AtomicReference的作用是对"对象"进行原子操作。 源码分析 public class AtomicR 继续阅读 >>


董恒毅 18/10/03 13:51:16
注:本篇博客部分内容引用自:Java并发编程:Lock 引言 在Java 5.0之前,协调对共享对象的访问可以使用到的机制只有synchronized和volatile。在Java 5.0之后,增加了一种新的机制:ReentrantLock。ReentrantLock并不是一种替代内置锁的方法,而是在内置锁不再适用的情况下,作为一种可选择的高级功能。 既生synchronized,何生Lock synchronized主要在功能上存在一些局限性。 如果获取锁的线程由于要等待IO或者其他原因(比如调用sleep方法)被阻塞了,但是又没有释放锁,其他线程便只能干巴巴地等待,试想一下,这多么影响程序执行效率。因此就需要有一种机制可以不让等待的线程一直无期限地等待下去(比如只等待一定的时间或者能够响应中断),通过Lock就可以办到。 再举个例子:当有多个线程读写文件时,读操作和写操作会发生冲突现象,写操作和写操作会发生冲突现象,但是读操作和读操作不会发生冲突现象。 如果采用synchronized关键字来实现 继续阅读 >>


董恒毅 18/09/27 15:46:50
为什么需要线程池 在生产环境中,我们不能无限制的创建线程,主要原因如下: 线程创建与销毁的代价并不低; 如果可运行的线程数量多于可用处理器的数量,有些线程将会闲置,大量闲置的线程会消耗系统资源(内存)并给垃圾收集器带来压力; 大量线程竞争CPU也会造成不小的性能开销。 Executor框架 Executor框架在Java 5中被引入,其内部使用了线程池机制。它在java.util.cocurrent包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。 Executor框架包括:线程池,Executor,Executors,ExecutorService等(Callable与Future本篇不进行讨论)。 Executor接口 我们先来了解一下其中的Executor接口: public interface Executor { void execute(Runnable command); } Executor接口的定义非常简单,但它却为灵活 继续阅读 >>


董恒毅 18/09/13 21:38:05
结构化与非结构化网络 非结构化的P2P网络是指网络节点之间不存在组织关系,节点之间完全是对等的,比如第一代P2P网络Napster。 结构化的P2P网络与非结构化恰好相反,我们认为网络在逻辑上存在一个人为设计的结构,比如Chord假定网络是一个环,Kadelima则假定为一颗二叉树。有了这些逻辑结构,就给我们资源查找引入了更多的算法和思路。 引言 我们在 计算机网络–详解P2P对等网络(一)—BitTorrent协议 这一篇博客中讲述了BT下载的过程:在对等用户拿到种子文件的时候,首先会联系tracker服务器,然后加入用户集群,并在用户集群中寻找自己所需的内容,最后与拥有内容的对等用户进行联系。 从BT下载的过程中引出本节所要讨论的问题:如何高效的从用户集群中找出哪些对等用户拥有你正在寻求的具体内容? 在历史中有三种比较典型的模型来解决这个问题: Napster:使用一个中心服务器接收所有的查询,服务器告知去哪下载其所需要的数据。存在的问题是中心服务器单点失效导致整个网络瘫痪。 继续阅读 >>


董恒毅 18/06/28 21:24:59
注:本篇博客只是讲述了一致性哈希的思想,我们会在之后讲述分布式哈希表以及一致性哈希的一种实现(Chord算法)。 什么是一致性哈希算法? 引用自维基百科: 一致性哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n个关键字重新映射,其中K是关键字的数量,n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位几乎需要对所有关键字进行重新映射。 总结:一致性哈希算法主要关注的是在分布式架构中,当节点数目发生变化的时候(增加/删除),怎样使再哈希的数据量最少。 一致性哈希的引出 在分布式系统中,节点的宕机、某个节点加入或者移出集群是常事。对于分布式存储而言,假设存储集群中有10台机器(node),如果采用传统Hash方式对数据分片(item)(即数据根据哈希函数映射到某台机器上存储),哈希函数应该是这样的:hash(item) % 10。根据上面的介绍,当node数发生变化(增加、移除)后,数据会被重新“打散”,导致大部分数据不能落到原 继续阅读 >>


董恒毅 18/06/26 21:06:58
一致性哈希的原理: 作者:championhengyi 发表于 2018/06/26 11:12:58 原文链接 https://blog.csdn.net/championhengyi/article/details/80812517 阅读:10 继续阅读 >>


董恒毅 18/06/26 11:12:58
注:本篇文章内容借鉴自:浅入浅出BitTorrent协议,其中加入了博主的部分原创,感谢,侵删~ 对等网络的概念 以下定义主要摘抄自维基百科与中科院计算技术研究所: 对等式网络(peer-to-peer,简称P2P),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系。它的作用在于,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络中的每个用户端既是资源(服务和内容)提供者(Server),又是资源获取者(Client),任何一个节点无法直接找到其他节点,必须依靠其用户群进行信息交流。 对等网络的模型 P2P网络的简易模型图如下: 如图,我们可以总结出P2P网络的一些特征: 非中心化:P2P是全分布式系统,网络中的资源和服务 继续阅读 >>


董恒毅 18/06/21 11:15:10
注:本文内容摘抄自CDN详解 — 不挑食的程序员,博主在其基础上进行了少量修改并加入了部分原创,感谢,侵删~ 之前我们已经学习过缓存机制以及Web代理,但对于大型网站的构建,这些还远远不够。要想真正的构建一个流行的网站,内容分发网络(Content Delivery Network)简称CDN,是一项不可或缺的技术。 什么是CDN? 以下内容摘自维基百科: 内容分发网络(CDN)是指一种通过互联网互相连接的计算机网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户。 如果对整个CDN系统做一个简单的描述: CDN系统主要由4大部分组成,每部分都由集群所构成。这4部分分别由CDN专属DNS服务器、全局负载均衡设备、区域负载均衡设备、CDN缓存服务器(边缘节点)构成。除过CDN专属DNS服务器,其他3部分集群都有源服务器上对应资源的全部或部分副本。CDN系统通过各部分的负载均衡算法,最终指示客户端使用附近最优的边缘节点中的一台缓存 继续阅读 >>


董恒毅 18/06/18 20:35:04
版权声明:本文出自“丁胖胖的BLOG”,请务必保留此出处:http://z00w00.blog.51cto.com/515114/1031287。 引言 我们在之前的Web缓存机制一文中提到,缓存服务器就可以作为一种代理服务器。 代理分为正向代理、反向代理、透明代理等等。今天我们着重介绍这三种代理方式。 什么是代理?什么是代理服务器? 在正式开始前,我们先对标题中的概念进行定义,以下摘自维基百科: 代理(英语:Proxy):也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。 代理服务器(英文:Proxy Server):提供代理服务的计算机系统或其它类型的网络终端。 正向代理(Forward Proxy) 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术 继续阅读 >>


董恒毅 18/06/12 21:36:18
序言 对于大多数人来说,我想,接触的第一个电子邮箱应该都是QQ邮箱。我也不例外,从第一次接触QQ邮箱开始,就对这种有别于传统邮箱的软件产生了一些兴趣,却由于种种原因一直都没有去探究它。前段时间刚好在找实习,期间凸显了电子邮箱的重要性,刚好最近也有了一些空闲的时间,遂在了解了电子邮件的基本工作原理之后,将其整理为这篇博客。 使用电子邮件的好处 很多人还不清楚使用电子邮件的好处,我贴一下。内容节选自:为什么要使用Email及如何用好Email 写Email跟用笔写信是一样的,你可以经过深思熟虑,将语言精心组织之后再写下来,也就是说,在工作中使用它更加正式,而且可以留下记录作为证据。长期使用Email会锻炼你的写作能力和语言组织能力; 如果我们都习惯使用“回复”或“全部回复”,通过一个邮件就可以看到关于一个项目全部的沟通信息; 上级经常不知道我们打电话或者发IM消息给客户到底在谈些什么,而发Email时“抄送”给他,通常情况下他都会很乐意接收,当然你也可以“抄送”或者“密送”给其他你希望看到 继续阅读 >>


董恒毅 18/06/08 14:34:36