共 30 页: 上一页 1 2 3 4 5 6 7 8 下一页 末页

2014年2月19日

摘要:在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容volatile的:The Java programming language provides a second mechanism, volatile fields, that is more c 阅读全文
posted @ 2014-02-19 18:25 Mainz 阅读 (29035) 评论 (6) 编辑

2014年2月17日

摘要:面试的时候发现99%的童鞋不理解为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的?还有non-blocking IO, event loop等概念很不清楚。来深入分析一下: 首先看下面的代码: function foo() { console.log( 'first' ); setTimeout( ( functio... 阅读全文
posted @ 2014-02-17 15:52 Mainz 阅读 (16514) 评论 (4) 编辑

2014年2月13日

摘要:OSGi模块化框架是很早就出来的一个插件化框架,最早Eclipse用它而出名,但这些年也没有大热虽然OSGi已经发布了版本1到版本5。现在用的最多的,也是本文讲述基于的是Equinox的OSGi实现,同时也是Eclipse核心,Spring Dynamic Module也是基于Equinox。OSGi框架为java系统提供了一个通用的容器,该系统中的 bundle,无需停止系统,即可实现 bund... 阅读全文
posted @ 2014-02-13 17:00 Mainz 阅读 (6292) 评论 (1) 编辑

2014年2月12日

摘要:锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态的锁虽然避免了这些问题,但是其实它们只是在没有真实的竞争时才有效。Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪 阅读全文
posted @ 2014-02-12 17:27 Mainz 阅读 (53442) 评论 (11) 编辑

2014年2月11日

摘要:单链表的Java实现首先参考wiki上的单链表说明,单链表每个节点包含数据和指向链表中下一个节点的指针或引用。然后看代码import java.lang.*;public class SinglyLinkeList{ Node start; public SinnglyLinkedList() { this.start=null; } public void addFront(Object newData) { Node cache = this.start; //store a reference to the current st... 阅读全文
posted @ 2014-02-11 17:37 Mainz 阅读 (516) 评论 (0) 编辑

2014年1月26日

摘要:如果我们想对外发布RESTful API,可以基于ASP.NET来构建Restful APIs,但需要部署IIS吗?答案是不必。你可以把它托管到一个Windows Service。具体如何把WEB API自托管到Windows Service可以参考这一文章:Self-Host a Web API (HttpSelfHostServer) (C#). 基本上照着一步步做就行了。例子里是基于Windows Console Application,同样可以Self-Host到Windows Service.问题在于如何把Controllers从Windows Service分离?可以使用autoF 阅读全文
posted @ 2014-01-26 14:49 Mainz 阅读 (1566) 评论 (1) 编辑
摘要:今天有空,小结一下Twitter Bootstrap 3的使用。首先不得不说,Bootstrap是迄今(2014)比较好的WEB设计框架(当然,其它的优秀WEB Framework还有:Foundation/Gumby/Yahoo pure css/Ink/),可以在很短的时间内构建出非常专业的WEB界面;配合各种模板,可以做出风格完全不同的网站;例如:谁能看的出TheNextWeb.com是基于Bootstrap框架做的呢?最近做了一下项目是使用Bootstrap 3和HTML5来构造响应式用户界面(Responsive Web),能够自适应PC、Tablet PC平板电脑(7,10寸)、P 阅读全文
posted @ 2014-01-26 13:36 Mainz 阅读 (1172) 评论 (0) 编辑

2014年1月24日

摘要:最近设计和实现了一个JAVA的RESTful API的后台业务系统架构,主要基于Java平台。设计要求是: 性能:平均响应时间(RESTful API)小于2s(平均负载的情况下),并发访问200个以上。 可用性:99%,87.6小时每年宕机时间 伸缩性:允许负载均衡集群水平扩展web server和application server。保留半年的历史数据。可以扩展。 ... 阅读全文
posted @ 2014-01-24 14:56 Mainz 阅读 (5162) 评论 (0) 编辑
摘要:先说下异步(Asynchronous)和多线程(Multi-threading)的区别:异步是相对与同步来说的,一般来说意味着非阻塞;异步在具体实现上是用多线程来实现的,但好处是你不用操心和管理多线程,它给你封装了一个干净的接口来调用。当然,在linux和javascript环境下,你要理解异步一般要理解事件驱动机制/Event loop: 《理解Event loop》。这里讲的主要是.NET。同步函数异步化有很多好处,但异步化是有开销的:《Understanding the Costs of Async and Await》。具体来说,下列场合适合用异步化:耗时的I/O操作,例如:读文件I/ 阅读全文
posted @ 2014-01-24 11:33 Mainz 阅读 (414) 评论 (0) 编辑

2014年1月23日

摘要:今天有空,总结一下.NET 4.5并行库(TaskParallelLibrary)用法。也许C和C++的程序员刚刚开始写C#还习惯于new Thread来新建一个线程,但新建线程需要内存和CPU上下文切换的开销,200,000个周期,销毁线程也需要100,000个周期;所以还需要实现一个线程池Threadpool。自从有了并行库(TaskParallelLibrary),这些都不需要了。使用Task.Factory.StartNew(() => DoSomething(item));可以创建一个线程并自动由线程池管理。写法非常简单,但其实里面误区很多:1. Task.Factory.St 阅读全文
posted @ 2014-01-23 17:00 Mainz 阅读 (3353) 评论 (0) 编辑
共 30 页: 上一页 1 2 3 4 5 6 7 8 下一页 末页

导航

统计