作者归档

《七周七并发模型》第五章Actor引言

作者:Paul Butcher   译者:黄炎  出品方:图灵  出版社:人民邮电出版社 (感谢图灵授权并发编程网发布此文)

使用actor就像租车——我们如果需要,可以快速便捷地租到一辆;如果车辆发生故障,也不需要自己修理,直接打电话给租车公司更换另外一辆即可。

actor模型是一种适用性非常好的通用并发编程模型。它可以应用于共享内存架构和分布式内存架构,适合解决地理分布型的问题。同时它还能提供很好的容错性。

阅读全文

《七周七并发模型》第一章概述


购买本书   作者:Paul Butcher   译者:黄炎  出品方:图灵  出版社:人民邮电出版社 (感谢图灵授权本站发布此文)

并发编程虽不是新的概念,最近却逐渐热门起来。一些编程语言,如Erlang、Haskell、Go、Scala、Clojure,也因对并发编程提供了良好的支持,而受到广泛关注。

并发编程复兴的主要驱动力来自于所谓的“多核危机”。正如摩尔定律所预言的那样,芯片性能仍在不断提高,但相比加快CPU的速度,计算机正在向多核化方向发展。正如Herb Sutter所说,“免费午餐的时代已然终结”。为了让代码运行得更快,单纯依靠更快的硬件已无法满足要求,我们需要利用多核,也就是发掘并行执行的潜力。

阅读全文

并发网服务器迁移

本月将并发编程网站迁移到UCloud云服务,本文是迁移的步骤,希望对其他同学有所帮助。

第一步:安装软件

软件包括php,mysql和nginx。

yum -y install  php php-fpm mysql nginx lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy

阅读全文

聊聊架构-模块化

什么是模块化?
 
模块化是指解决一个复杂问题时,自上而下逐层把系统划分成若干模块的过程。

阅读全文

聊聊架构

(最近我会写一些我对架构的理解和思考,本篇是第一篇,欢迎交流)

什么是系统架构?

从字面上理解,系统架构是系统的框架结构,是系统进行抽象之后的一个草图。它包含了系统中各个抽象组件的协作方式。

阅读全文

Java网络教程

译者:贾毅  校对:方腾飞

本系列尚未翻译完成,有兴趣参与翻译的请在本文评论处留言。

1 Java 网络教程: 基础
2 Java 网络教程: Socket
3 Java 网络教程: ServerSocket
4 Java Networking: UDP DatagramSocket
5 Java 网络教程: URL + URLConnection
6 Java网络教程:JarURLConnection
7 Java 网络教程: InetAddress
8 Java网络教程:Protocol Design

阅读全文

并发网每月TOP10文章

ICON5并发网从七月份开始,每月推送网站的TOP10文章,你值得阅读。感谢小编卢爱然的编辑,感谢UED冯念制作的图标

Java中的Atomic包使用指南

本文首发于并发网,作者:方腾飞

引言

Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。

阅读全文

线上性能问题初步排查方法

本文首发于并发网,作者:方腾飞

引言

有时候有很多问题只有在线上或者预发环境才能发现,而线上又不能Debug,所以线上问题定位就只能看日志,系统状态和Dump线程,本文只是简单的介绍一些常用的工具,帮助定位线上问题。

阅读全文

JVM性能优化系列

阅读全文

并发工具类(四)两个线程进行数据交换的Exchanger

简介

Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。

Exchanger的应用场景

Exchanger可以用于遗传算法,遗传算法里需要选出两个人作为交配对象,这时候会交换两人的数据,并使用交叉规则得出2个交配结果。
Exchanger也可以用于校对工作。比如我们需要将纸制银流通过人工的方式录入成电子银行流水,为了避免错误,采用AB岗两人进行录入,录入到Excel之后,系统需要加载这两个Excel,并对这两个Excel数据进行校对,看看是否录入的一致。代码如下:

阅读全文

并发工具类(三)控制并发线程数的Semaphore

简介

Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。很多年以来,我都觉得从字面上很难理解Semaphore所表达的含义,只能把它比作是控制流量的红绿灯,比如XX马路要限制流量,只允许同时有一百辆车在这条路上行使,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,后面的车会看到红灯,不能驶入XX马路,但是如果前一百辆中有五辆车已经离开了XX马路,那么后面就允许有5辆车驶入马路,这个例子里说的车就是线程,驶入马路就表示线程在执行,离开马路就表示线程执行完成,看见红灯就表示线程被阻塞,不能执行。

应用场景

Semaphore可以用于做流量控制,特别公用资源有限的应用场景,比如数据库连接。假如有一个需求,要读取几万个文件的数据,因为都是IO密集型任务,我们可以启动几十个线程并发的读取,但是如果读到内存后,还需要存储到数据库中,而数据库的连接数只有10个,这时我们必须控制只有十个线程同时获取数据库连接保存数据,否则会报错无法获取数据库连接。这个时候,我们就可以使用Semaphore来做流控,代码如下:
阅读全文

并发工具类(二)同步屏障CyclicBarrier

简介

CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

阅读全文

并发工具类(一)等待多线程完成的CountDownLatch

简介

CountDownLatch 允许一个或多个线程等待其他线程完成操作。

应用场景

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。在这个需求中,要实现主线程等待所有线程完成sheet的解析操作,最简单的做法是使用join。代码如下:

阅读全文

Java线程状态图

下图很好的描述了Java的线程状态。

threads2

 

阅读全文

return top