Mryqu's Notes


  • 首页

  • 搜索
close

JDK7的Fork/Join并发框架

时间: 2013-08-06   |   分类: Java     |   阅读: 24 字 ~1分钟
硬件的发展趋势非常清晰;Moore定律表明不会出现更高的时钟频率,但是每个芯片上会集成更多的内核。很容易想象让十几个处理器繁忙地处理一个粗粒度的任务边界(比如一个用户请求),但是这项技术不会扩大到数千个处理器——在这种环境下短时间内流量可能会呈指数级增长,但最终硬件趋势将会占上风。当跨入多内核时代时,我们需要找到更细粒度的并行性,否则将面临即便有许多工作需要去做而处理器却仍处于空闲的风险。如果希望跟上技术发展的脚步,软件平台也必须配合主流硬件平台的转变。最终,Java7包含的一种框架,用于表示某种更细粒度级别的并行算法:Fork/Join框架。 Fork/Join融合了分而治之(divide-and-conquer)编程技术;获取问题后,递归地将它分成多个子问题,直到每个子问题都足够小,以至于可以高效地串行地解决它们。递归的过程将会把问题分成两个或者多个子问题,然后把这些问题放入队列中等待处理(fork步骤),接下来等待所有子问题的结果(join步骤),把多个结果合并到一起。 假如充分分解任务的大小,那么创建一个线程的开销有可能超出执行该任务的开销。因此,fork/join框架使用与可用核数相匹配的适当大小的线程池,以减少这种频繁交换的开销。为避免线程空闲,框架包含了一个工作窃取方法,该方法可以使空闲线程从一个执行较慢的线程中窃取等待其处理的工作。 Java教程 - Fork/Join 分解和合并:Java 也擅长轻松的并行编程! JDK 7 中的 Fork/Join 模式 Doug Lea: “A Java Fork/Join Framework":了解 Fork/Join 模式的实现机制和执行性能。 InfoQ: Doug Lea谈Fork/Join框架

Java NaN小结

时间: 2013-08-05   |   分类: Java     |   阅读: 47 字 ~1分钟
Double.NAN介绍 Double类有个NaN常量,是Not a Number的缩写,其值等于Double.longBitsToDouble(0x7ff8000000000000L) ,用于表示非数值。NaN必须使用isNaN(double)方法来判断,NaN与任何double数值进行加减乘除等数学运算后的结果仍然是NaN,且NaN使用==运算符与自身进行判断返回结果为false。测试代码如下: 测试结果如下: Double.NaN==Double.NaN :false Double.isNaN(Double.NaN*0) :true Double.NaN*0==0 :false Double.isNaN(Double.NaN/0) :true Double.NaN/0==0 :false Double.isNaN(0/Double.NaN) :true 0/Double.NaN==0 :false Double.isNaN(Double.NaN+0) :true Double.NaN+0==0 :false Double.isNaN(Double.NaN-0) :true Double.NaN-0==0 :false Double.isNaN(Double.NaN*Double.NaN) :true Double.NaN*Double.NaN==0 :false 自定义NAN介绍 Double.NaN可以用来表示计算结果发生异常,但是无法获知异常原因。我们可以通过自定义NAN来解决这一问题。使用Double类的isNaN(double)方法判断自定义NAN,其返回结果为true,我们可以通过自己的方法判决到底是那种NaN。测试代码如下: 测试结果如下: Double.isNaN(Double.NaN) :true MyNaN.isMyNaN(Double.NaN) :false Double.isNaN(MyNaN.INVALID_PARAMETER_NAN) :true MyNaN.isMyNaN(MyNaN.INVALID_PARAMETER_NAN) :true Double.isNaN(Double.longBitsToDouble(0xffff000000000123L)) :true MyNaN.isMyNaN(Double.longBitsToDouble(0xffff000000000123L)) :false

Ubuntu操作笔记

时间: 2013-08-05   |   分类: Tool   Linux     |   阅读: 206 字 ~1分钟
在Ubuntu上修改主机名 (2013-08-05) 显示主机名 hostname -s 更多细节见hostname帮助文档。 修改主机名 sudo hostname your-new-name # Ubuntu专有 hostnamectl set-hostname new-hostname 更多细节见hostnamectl帮助文档。 上述命令重启服务器后失效。 修改主机名配置 sudo -H vi /etc/hostname sudo -H vi /etc/hosts Ubuntu下显示本机IP (2013-10-20) 命令为:ip addr show 感觉比ifconfig eth0更通用些! 在Ubuntu Linux上安装netstat (2014-01-01) 在UbuntuLinux上安装netstat,apt-get其实是找不到netstat包的,需要用apt-get安装net-tools 。net-tools 是Linux平台NET-3网络分发包,包括arp、hostname、ifconfig、netstat、rarp、route、plipconfig、slattach、mii-tool、iptunnel和ipmaddr工具。 apt-get install net-tools 在Ubuntu中禁掉IPv6 (2015-03-20) 为了禁止掉IPv6,需要在/etc/sysctl.conf做如下修改: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 如果IPv6仍没有禁掉,是由于sysctl.conf没有激活造成的。为了解决上述问题,执行下面的命令: sudo sysctl -p 之后,运行: $ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 它将返回1,这表示IPv6被成功禁止掉。 在Ubuntu中强制Apt-get使用IPv4或IPv6 (2015-05-18) 快速命令行选项 如果只想一次使apt-get使用IPv4或IPv6,使用下列步骤。该功能尽在apt-get的0.9.7.9~exp1版本后可用。首先,通过如下命令确认apt-get版本高于0.9.7.9~exp1: apt-get --version 结果近似于:
阅读全文 »

Java线程是否会被垃圾回收?

时间: 2013-07-30   |   分类: Java     |   阅读: 222 字 ~2分钟
如果将线程启动后,然后线程变量置空,线程会怎么样? import java.lang.ref.WeakReference; public class TestThread { public static void testUnreferencedThread() { // anonymous class extends Thread Thread t = new Thread() { public void run() { // infinite loop while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) {} // as long as this line printed out, you know it is alive. System.out.println("thread is running..."); } } }; t.start(); WeakReference<Thread> wr = new WeakReference<Thread>(t); t = null; // no more references for Thread t // another infinite loop while (true) { try { Thread.
阅读全文 »

显示jar文件中某个类的公开方法

时间: 2013-07-26   |   分类: Java     |   阅读: 144 字 ~1分钟
使用jar命令显示jar文件的内容 C:\>jar tvf log4j.jar 0 SatAug 25 00:29:46 GMT+08:00 2007 META-INF/ 262 Sat Aug 25 00:29:44GMT+08:00 2007 META-INF/MANIFEST.MF 0 SatAug 25 00:10:04 GMT+08:00 2007 org/ 0 SatAug 25 00:10:04 GMT+08:00 2007 org/apache/ 0 SatAug 25 00:10:06 GMT+08:00 2007 org/apache/log4j/ ................. 676 Sat Aug 25 00:10:04GMT+08:00 2007 org/apache/log4j/Appender.class 2567 Sat Aug 25 00:10:04 GMT+08:00 2007org/apache/log4j/Logger.class 1038 Sat Aug 25 00:10:04 GMT+08:00 2007org/apache/log4j/Layout.class ................. 0 SatAug 25 00:29:46 GMT+08:00 2007 META-INF/maven/ 0 SatAug 25 00:29:46 GMT+08:00 2007 META-INF/maven/log4j/ 0 SatAug 25 00:29:46 GMT+08:00 2007 META-INF/maven/log4j/log4j/ 17780 Sat Aug 25 00:09:44 GMT+08:00 2007META-INF/maven/log4j/log4j/pom.
阅读全文 »

Java RMI 客户端回调(callback)

时间: 2013-07-26   |   分类: Service+JavaEE     |   阅读: 5 字 ~1分钟
项目的代码用到了Java RMI 客户端回调,了解一下这方面资料。 http://docs.oracle.com/cd/E13211_01/wle/rmi/callbak.htm http://blog.sina.com.cn/s/blog_6a1928130100mmk5.html

Python dictionary practice

时间: 2013-07-25   |   分类: Python     |   阅读: 194 字 ~1分钟
reverse Dict (Swap Key and Value) >>> a={"a":123,"b":222,"c":30,"d":6,"e":1} >>> print a {'a': 123, 'c': 30, 'b': 222, 'e': 1, 'd': 6} >>> res = dict((v,k) for k,v in a.iteritems()) >>> print res {1: 'e', 6: 'd', 123: 'a', 222: 'b', 30: 'c'} >>> a={"a":123,"b":222,"c":30,"d":6,"e":1} >>> print a {'a': 123, 'c': 30, 'b': 222, 'e': 1, 'd': 6} >>> res = dict(zip(a.values(), a.keys())) >>> print res {1: 'e', 6: 'd', 123: 'a', 222: 'b', 30: 'c'} Top N by Dict Value >>> from collections import Counter >>> a={"a":123,"b":222,"c":30,"d":6,"e":1} >>> top_three = Counter(a).
阅读全文 »

[Hadoop] 在RACE虚拟机上安装单节点Hadoop

时间: 2013-07-24   |   分类: BigData     |   阅读: 154 字 ~1分钟
RACE(Remote Access ComputerEnvironment)是SAS公司内使用的虚拟机集成系统。通过RACE系统申请虚拟机,使用自己或别的项目组、同事创建的RACEimage安装操作系统和应用程序,省心省力。 RACE安装及配置 申请一台RACE虚拟机,使用RACE Image(Id:579290,STG_LAX_RHEL6_SAS94_16G_Ora112 )安装了RHEL linux操作系统。 启动后,使用下列脚本替换主机信息 /nfs/cardio/vol/vol1/sasinside/setup/changehost94.sh 安装Java JDK 如果RACE Image没有安装Java JDK的话,需要自己安装: yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel 幸好在/sasjdk/jdk发现很多版本的Java JDK,最后决定使用下列位置的openjdk: /usr/lib/jvm/java-openjdk/ 创建帐号 原系统中没有安装hadoop,但是有hadoop帐号。我没有找到密码,只好重做一把: userdel hadoop useradd hadoop passwd hadoop 下载并解压缩Hadoop 因为Hadoop 2.0采用YARN,hive、mahout等需要MapReduce V1的可能无法使用,这里安装的是Hadoop 1.2.1。 # mkdir /opt/hadoop # cd /opt/hadoop/ # wget http://download.nextag.com/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz # tar -xzf hadoop-1.2.1.tar.gz # chown -R hadoop /opt/hadoop # cd /opt/hadoop/hadoop-1.2.1/ 配置Hadoop 下列为Hadoop的单节点伪分布模式配置。 conf/core-site.xml: fs.default.name hdfs://localhost:9000/ conf/hdfs-site.xml: dfs.replication 1 conf/mapred-site.xml: mapred.job.tracker localhost:9001 conf/hadoop-env.sh: export JAVA_HOME=/usr/lib/jvm/java-openjdk/ export HADOOP_OPTS=-Djava.
阅读全文 »

ActiveMQ集群

时间: 2013-07-24   |   分类: Service+JavaEE     |   阅读: 287 字 ~2分钟
ActiveMQ Introduction ActiveMQ is an open source (Apache 2.0 licensed) message brokerwhich fully implements the Java Message Service 1.1. It providesadvanced features like clustering, multiple message stores, andability to use file systems, and databases as a JMS persistenceprovider. ActiveMQ HA ActiveMQ support reliable high performance load balancing ofmessages on a queue across consumers. If a consumer dies, anyunacknowledged messages are redelivered to other consumers on thequeue. If one consumer is faster than the others it gets moremessages etc.
阅读全文 »

PostgreSQL数据库分区的update操作

时间: 2013-07-19   |   分类: db+nosql     |   阅读: 176 字 ~1分钟
CREATE TABLE measurement ( city_id int not null, unitsales int ); CREATE TABLE measurement_1 ( CHECK (unitsales < 100 ) ) INHERITS (measurement); CREATE TABLE measurement_2 ( CHECK (unitsales >= 100 ) ) INHERITS (measurement); CREATE OR REPLACE FUNCTIONmeasurement_insert_trigger() RETURNS TRIGGER AS $$ BEGIN IF (NEW.unitsales < 100) THEN INSERT INTO measurement_1 VALUES (NEW.*); ELSE INSERT INTO measurement_2 VALUES (NEW.*); END IF; RETURNNULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER insert_measurement_trigger BEFOREINSERT ON measurement FOR EACH ROWEXECUTE PROCEDURE measurement_insert_trigger(); INSERT INTO measurement VALUES (1, 1); INSERT INTO measurement VALUES (2, 2); INSERT INTO measurement VALUES (3, 300); INSERT INTO measurement VALUES (4, 400); mysdm=# select * from measurement_1; city_id | unitsales ---------+----------- 1| 1 2| 2 (2 rows) mysdm=# select * from measurement_2; city_id | unitsales ---------+----------- 3| 300 4| 400 (2 rows) Postgres没有智能到在update时根据记录的新值变动分区,而是报错!
阅读全文 »
56 57 58 59 60 61 62 63 64

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%