免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6085 | 回复: 19

Java多线程效率-素数计算 [复制链接]

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:31 |显示全部楼层

  1. JavaNative 单线程实现
  2. Number of primes under 10000000 is  664579
  3. Time taken is 21.640470622 s

  4. JavaPure 单线程实现:
  5. Number of primes under 10000000 is  665025
  6. Time taken is 29.615632484 s

  7. JavaPure 4线程实现:
  8. Number of primes under 10000000 is  665025
  9. Time taken is 12.943822983 s

  10. JavaPure 5线程实现:
  11. Number of primes under 10000000 is  665025
  12. Time taken is 11.316296326 s

  13. JavaPure 6线程实现:
  14. Number of primes under 10000000 is  665025
  15. Time taken is 11.852669045 s

  16. JavaPure 7线程实现:
  17. Number of primes under 10000000 is  665024
  18. Time taken is 11.875677067 s

  19. JavaPure 8线程实现:
  20. Number of primes under 10000000 is  665025
  21. Time taken is 11.583545436 s

  22. JavaPure 9线程实现:
  23. Number of primes under 10000000 is  665025
  24. Time taken is 11.472949961 s

  25. JavaPure 4Mix线程实现:
  26. Number of primes under 10000000 is  664579
  27. Time taken is 10.488330912 s

  28. JavaPure 5Mix线程实现:
  29. Number of primes under 10000000 is  664579
  30. Time taken is 10.491616154 s

  31. JavaPure 6Mix线程实现:
  32. Number of primes under 10000000 is  664579
  33. Time taken is 10.480008206 s

  34. JavaPure 7Mix线程实现:
  35. Number of primes under 10000000 is  664579
  36. Time taken is 10.357619101 s

  37. JavaPure 8Mix线程实现:
  38. Number of primes under 10000000 is  664579
  39. Time taken is 10.43754778 s

  40. JavaPure 9Mix线程实现:
  41. Number of primes under 10000000 is  664579
  42. Time taken is 10.511800879 s
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:32 |显示全部楼层
先上主函数
  1. package com.fangzhaoguo.primefinder;

  2. public class Main {

  3.         public static void main(String[] args) {
  4.                 timeAndCompute(10000000);
  5.         }

  6.         public static void timeAndCompute(final long number) {
  7.                 long start = 0, numberofPrime = 0, end = 0;
  8.                 NativePrimeFinder nativePrimeFinder = new NativePrimeFinder();
  9.                 start = System.nanoTime();
  10.                 numberofPrime = nativePrimeFinder.countPrime(number);
  11.                 end = System.nanoTime();
  12.                 System.out.println("\nJavaNative 单线程实现");
  13.                 System.out.println("Number of primes under " + number + " is  "
  14.                                 + numberofPrime);
  15.                 System.out.println("Time taken is " + (end - start) / 1.0e9 + " s");

  16.                 SequentialPrimeFinder sequentialPrimeFinder = new SequentialPrimeFinder();
  17.                 start = System.nanoTime();
  18.                 numberofPrime = sequentialPrimeFinder.countPrime(number);
  19.                 end = System.nanoTime();
  20.                 System.out.println("\nJavaPure 单线程实现:");
  21.                 System.out.println("Number of primes under " + number + " is  "
  22.                                 + numberofPrime);
  23.                 System.out.println("Time taken is " + (end - start) / 1.0e9 + " s");

  24.                 for (int i = 4; i < 10; i++) {
  25.                         ConcurrentPrimeFinder concurrentPrimeFinder = new ConcurrentPrimeFinder(
  26.                                         i);
  27.                         start = System.nanoTime();
  28.                         numberofPrime = concurrentPrimeFinder.countPrime(number);
  29.                         end = System.nanoTime();
  30.                         System.out.println("\nJavaPure " + i + "线程实现:");
  31.                         System.out.println("Number of primes under " + number + " is  "
  32.                                         + numberofPrime);
  33.                         System.out.println("Time taken is " + (end - start) / 1.0e9 + " s");
  34.                 }

  35.                 for (int i = 4; i < 10; i++) {
  36.                         MixConcurrentPrimeFinder mixConcurrentPrimeFinder = new MixConcurrentPrimeFinder(
  37.                                         i);
  38.                         start = System.nanoTime();
  39.                         numberofPrime = mixConcurrentPrimeFinder.countPrime(number);
  40.                         end = System.nanoTime();
  41.                         System.out.println("\nJavaPure " + i + "Mix线程实现:");
  42.                         System.out.println("Number of primes under " + number + " is  "
  43.                                         + numberofPrime);
  44.                         System.out.println("Time taken is " + (end - start) / 1.0e9 + " s");
  45.                 }
  46.         }
  47. }
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:34 |显示全部楼层
  1. package com.fangzhaoguo.primefinder;

  2. public abstract class AbstractPrimeFinder {

  3.         public abstract boolean isPrime(final long number);

  4.         public abstract int countPrime(final long number);

  5.         public abstract int countPrime(final long lower, final long upper);
  6. }
复制代码
这是一个虚基类,其实也可以写成接口,不过感觉用处不大;
下面的四个例子中,除了JavaNative的例子没有用到这个类,其他三个纯Java的例子都用到了

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:36 |显示全部楼层
JavaNative的Java类
  1. package com.fangzhaoguo.primefinder;

  2. public class NativePrimeFinder {
  3.         static {
  4.                 System.loadLibrary("libJavaNative_PrimeFinder");
  5.         }

  6.         public NativePrimeFinder() {

  7.         }

  8.         public native boolean isPrime(final long number);

  9.         public native int countPrime(final long number);

  10.         public native int countPrime(final long lower, final long upper);
  11. }
复制代码
JavaNative的C头文件,这里只是将#include <jni.h>修改成#include "jni.h"
  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include "jni.h"
  3. /* Header for class com_fangzhaoguo_primefinder_NativePrimeFinder */

  4. #ifndef _Included_com_fangzhaoguo_primefinder_NativePrimeFinder
  5. #define _Included_com_fangzhaoguo_primefinder_NativePrimeFinder
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9.         /*
  10.          * Class:     com_fangzhaoguo_primefinder_NativePrimeFinder
  11.          * Method:    isPrime
  12.          * Signature: (J)Z
  13.          */
  14.         JNIEXPORT jboolean JNICALL Java_com_fangzhaoguo_primefinder_NativePrimeFinder_isPrime(
  15.                         JNIEnv *, jobject, jlong);

  16.         /*
  17.          * Class:     com_fangzhaoguo_primefinder_NativePrimeFinder
  18.          * Method:    countPrime
  19.          * Signature: (J)I
  20.          */
  21.         JNIEXPORT jint JNICALL Java_com_fangzhaoguo_primefinder_NativePrimeFinder_countPrime__J(
  22.                         JNIEnv *, jobject, jlong);

  23.         /*
  24.          * Class:     com_fangzhaoguo_primefinder_NativePrimeFinder
  25.          * Method:    countPrime
  26.          * Signature: (JJ)I
  27.          */
  28.         JNIEXPORT jint JNICALL Java_com_fangzhaoguo_primefinder_NativePrimeFinder_countPrime__JJ(
  29.                         JNIEnv *, jobject, jlong, jlong);

  30. #ifdef __cplusplus
  31. }
  32. #endif
  33. #endif
复制代码
JavaNative的C源文件
  1. /*
  2. * com_fangzhaoguo_primefinder_NativePrimeFinder.c
  3. *
  4. *  Created on: 2013年7月18日
  5. *      Author: root
  6. */

  7. #include "com_fangzhaoguo_primefinder_NativePrimeFinder.h"

  8. #include <stdio.h>
  9. #include <math.h>

  10. JNIEXPORT jboolean JNICALL Java_com_fangzhaoguo_primefinder_NativePrimeFinder_isPrime(
  11.                 JNIEnv *env, jobject obj, jlong number) {
  12.         jlong i = 0;
  13.         if (1 >= number) {
  14.                 return 0;
  15.         }
  16.         for (i = 2; i <= sqrt(number); i++) {
  17.                 if (0 == number % i) {
  18.                         return 0;
  19.                 }
  20.         }
  21.         return 1;
  22. }

  23. JNIEXPORT jint JNICALL Java_com_fangzhaoguo_primefinder_NativePrimeFinder_countPrime__J(
  24.                 JNIEnv *env, jobject obj, jlong number) {
  25.         jint total = 0;
  26.         jlong i = 0;
  27.         for (i = 2; i < number; i++) {
  28.                 if (Java_com_fangzhaoguo_primefinder_NativePrimeFinder_isPrime(env, obj,
  29.                                 i)) {
  30.                         total++;
  31.                 }
  32.         }
  33.         return total;
  34. }

  35. JNIEXPORT jint JNICALL Java_com_fangzhaoguo_primefinder_NativePrimeFinder_countPrime__JJ(
  36.                 JNIEnv *env, jobject obj, jlong lower, jlong upper) {
  37.         jint total = 0;
  38.         jlong i = 0;
  39.         for (i = lower; i < upper; i++) {
  40.                 if (Java_com_fangzhaoguo_primefinder_NativePrimeFinder_isPrime(env, obj,
  41.                                 i)) {
  42.                         total++;
  43.                 }
  44.         }
  45.         return total;
  46. }
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:37 |显示全部楼层
java单线程类
  1. package com.fangzhaoguo.primefinder;

  2. public class SequentialPrimeFinder extends AbstractPrimeFinder {

  3.         public SequentialPrimeFinder() {
  4.         }

  5.         public boolean isPrime(final long number) {
  6.                 if (1 >= number) {
  7.                         return false;
  8.                 }
  9.                 for (long i = 2; i < Math.sqrt(number); i++) {
  10.                         if (0 == number % i) {
  11.                                 return false;
  12.                         }
  13.                 }
  14.                 return true;
  15.         }

  16.         @Override
  17.         public int countPrime(long number) {
  18.                 int total = 0;
  19.                 for (long i = 2; i < number; i++) {
  20.                         if (isPrime(i)) {
  21.                                 total++;
  22.                         }
  23.                 }
  24.                 return total;
  25.         }

  26.         @Override
  27.         public int countPrime(long lower, long upper) {
  28.                 int total = 0;
  29.                 for (long i = lower; i < upper; i++) {
  30.                         if (isPrime(i)) {
  31.                                 total++;
  32.                         }
  33.                 }
  34.                 return total;
  35.         }

  36. }
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:39 |显示全部楼层
Java多线程的类
在这个类中,没有对运算进行优化,只是简单的将计算区域划分为与线程个数相同的几个部分
  1. package com.fangzhaoguo.primefinder;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.concurrent.Callable;
  5. import java.util.concurrent.ExecutionException;
  6. import java.util.concurrent.ExecutorService;
  7. import java.util.concurrent.Executors;
  8. import java.util.concurrent.Future;
  9. import java.util.concurrent.TimeUnit;

  10. public class ConcurrentPrimeFinder extends AbstractPrimeFinder {

  11.         private int poolSize;

  12.         public ConcurrentPrimeFinder(int poolSize) {
  13.                 // this.poolSize = Runtime.getRuntime().availableProcessors();
  14.                 this.poolSize = poolSize;
  15.         }

  16.         public boolean isPrime(final long number) {
  17.                 if (1 >= number) {
  18.                         return false;
  19.                 }
  20.                 for (long i = 2; i < Math.sqrt(number); i++) {
  21.                         if (0 == number % i) {
  22.                                 return false;
  23.                         }
  24.                 }
  25.                 return true;
  26.         }

  27.         @Override
  28.         public int countPrime(long number) {
  29.                 int total = 0;
  30.                 List<Callable<Integer>> partitions = new ArrayList<Callable<Integer>>();
  31.                 long part = number / poolSize;
  32.                 for (int i = 0; i < poolSize; i++) {
  33.                         final long low = (i * part) + 1;
  34.                         final long up = (i == poolSize - 1) ? number : low + part - 1;
  35.                         partitions.add(new Callable<Integer>() {

  36.                                 @Override
  37.                                 public Integer call() throws Exception {
  38.                                         return countPrimeInRange(low, up);
  39.                                 }
  40.                         });
  41.                 }

  42.                 ExecutorService executorService = Executors
  43.                                 .newFixedThreadPool(poolSize);
  44.                 try {
  45.                         List<Future<Integer>> reFutures = executorService.invokeAll(
  46.                                         partitions, 10000, TimeUnit.SECONDS);
  47.                         executorService.shutdown();
  48.                         for (Future<Integer> result : reFutures) {
  49.                                 total += result.get();
  50.                         }
  51.                 } catch (InterruptedException e) {
  52.                         e.printStackTrace();
  53.                 } catch (ExecutionException e) {
  54.                         e.printStackTrace();
  55.                 }
  56.                 return total;
  57.         }

  58.         @Override
  59.         public int countPrime(long lower, long upper) {
  60.                 int total = 0;
  61.                 return total;
  62.         }

  63.         private int countPrimeInRange(long lower, long upper) {
  64.                 int total = 0;
  65.                 for (long i = lower; i < upper; i++) {
  66.                         if (isPrime(i)) {
  67.                                 total++;
  68.                         }
  69.                 }
  70.                 return total;
  71.         }
  72. }
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:41 |显示全部楼层
Java多线程的类
在这个类中,运算进行优化,首先过滤了所有的偶数,因为偶数中只有2 是素数,所以将total的初始值设为1,然后直接忽略偶数。在判断某一个数是不是素数时,不再考虑偶数问题
  1. package com.fangzhaoguo.primefinder;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.concurrent.Callable;
  5. import java.util.concurrent.ExecutionException;
  6. import java.util.concurrent.ExecutorService;
  7. import java.util.concurrent.Executors;
  8. import java.util.concurrent.Future;
  9. import java.util.concurrent.TimeUnit;

  10. public class MixConcurrentPrimeFinder extends AbstractPrimeFinder {

  11.         private int poolSize;

  12.         public MixConcurrentPrimeFinder(int poolSize) {
  13.                 // this.poolSize = Runtime.getRuntime().availableProcessors();
  14.                 this.poolSize = poolSize;
  15.         }

  16.         public boolean isPrime(final long number) {
  17.                 if (1 >= number) {
  18.                         return false;
  19.                 }
  20.                 if (3 == number || 5 == number) {
  21.                         return true;
  22.                 }
  23.                 for (long i = 1; i < Math.sqrt(number); i++) {
  24.                         if (0 == number % (2 * i + 1)) {
  25.                                 return false;
  26.                         }
  27.                 }
  28.                 return true;
  29.         }

  30.         @Override
  31.         public int countPrime(long number) {
  32.                 int total = 1;
  33.                 List<Callable<Integer>> partitions = new ArrayList<Callable<Integer>>();
  34.                 for (int i = 0; i < poolSize; i++) {
  35.                         final long start = 2 * i + 3;
  36.                         final long end = number;
  37.                         partitions.add(new Callable<Integer>() {

  38.                                 @Override
  39.                                 public Integer call() throws Exception {
  40.                                         return countPrimeInRange(start, end);
  41.                                 }
  42.                         });
  43.                 }

  44.                 ExecutorService executorService = Executors
  45.                                 .newFixedThreadPool(poolSize);
  46.                 try {
  47.                         List<Future<Integer>> reFutures = executorService.invokeAll(
  48.                                         partitions, 10000, TimeUnit.SECONDS);
  49.                         executorService.shutdown();
  50.                         for (Future<Integer> result : reFutures) {
  51.                                 total += result.get();
  52.                         }
  53.                 } catch (InterruptedException e) {
  54.                         e.printStackTrace();
  55.                 } catch (ExecutionException e) {
  56.                         e.printStackTrace();
  57.                 }
  58.                 return total;
  59.         }

  60.         @Override
  61.         public int countPrime(long lower, long upper) {
  62.                 int total = 0;
  63.                 return total;
  64.         }

  65.         private int countPrimeInRange(long start, long end) {
  66.                 int total = 0;
  67.                 int part = poolSize * 2;
  68.                 for (long i = start; i < end; i += part) {
  69.                         if (isPrime(i)) {
  70.                                 total++;
  71.                         }
  72.                 }
  73.                 return total;
  74.         }

  75. }
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:42 |显示全部楼层
  1. public abstract int countPrime(final long lower, final long upper);
复制代码
这个函数用于计算指定范围内的素数,这例子中并没有予以实现,都是计算0-10000000之间的素数的个数

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:44 |显示全部楼层
本来打算做两个JavaNative的多线程例子,可是做出来的动态链接库有问题,无法使用,详情请看

JavaNative 使用Boost多线程库的问题   
JavaNative 使用C多线程库的问题

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2013-07-19 13:48 |显示全部楼层
我的CPU是Intel i5 430M,虚拟四核的,经过测试,感觉线程数大于等于四,加速效果比较明显,至于后面,就看不出来多少区别了

下面是没有经过优化的Java多线程运行的结果,线程数从1-39
  1. JavaNative 单线程实现
  2. Number of primes under 10000000 is  664579
  3. Time taken is 21.359702833 s
  4. JavaPure 单线程实现:
  5. Number of primes under 10000000 is  664579
  6. Time taken is 29.103943469 s
  7. JavaPure 1线程实现:
  8. Number of primes under 10000000 is  664579
  9. Time taken is 26.835752807 s
  10. JavaPure 2线程实现:
  11. Number of primes under 10000000 is  664579
  12. Time taken is 17.268595996 s
  13. JavaPure 3线程实现:
  14. Number of primes under 10000000 is  664579
  15. Time taken is 14.083862457 s
  16. JavaPure 4线程实现:
  17. Number of primes under 10000000 is  664579
  18. Time taken is 12.298518244 s
  19. JavaPure 5线程实现:
  20. Number of primes under 10000000 is  664579
  21. Time taken is 11.293884756 s
  22. JavaPure 6线程实现:
  23. Number of primes under 10000000 is  664579
  24. Time taken is 11.325465024 s
  25. JavaPure 7线程实现:
  26. Number of primes under 10000000 is  664578
  27. Time taken is 11.738370314 s
  28. JavaPure 8线程实现:
  29. Number of primes under 10000000 is  664579
  30. Time taken is 11.126746332 s
  31. JavaPure 9线程实现:
  32. Number of primes under 10000000 is  664579
  33. Time taken is 11.155879652 s
  34. JavaPure 10线程实现:
  35. Number of primes under 10000000 is  664579
  36. Time taken is 11.467730438 s
  37. JavaPure 11线程实现:
  38. Number of primes under 10000000 is  664579
  39. Time taken is 11.723364353 s
  40. JavaPure 12线程实现:
  41. Number of primes under 10000000 is  664579
  42. Time taken is 11.408438917 s
  43. JavaPure 13线程实现:
  44. Number of primes under 10000000 is  664579
  45. Time taken is 11.049511426 s
  46. JavaPure 14线程实现:
  47. Number of primes under 10000000 is  664579
  48. Time taken is 11.056839138 s
  49. JavaPure 15线程实现:
  50. Number of primes under 10000000 is  664579
  51. Time taken is 11.129368095 s
  52. JavaPure 16线程实现:
  53. Number of primes under 10000000 is  664579
  54. Time taken is 11.109334184 s
  55. JavaPure 17线程实现:
  56. Number of primes under 10000000 is  664579
  57. Time taken is 11.158874594 s
  58. JavaPure 18线程实现:
  59. Number of primes under 10000000 is  664579
  60. Time taken is 11.178487773 s
  61. JavaPure 19线程实现:
  62. Number of primes under 10000000 is  664579
  63. Time taken is 11.120964776 s
  64. JavaPure 20线程实现:
  65. Number of primes under 10000000 is  664579
  66. Time taken is 11.086961562 s
  67. JavaPure 21线程实现:
  68. Number of primes under 10000000 is  664579
  69. Time taken is 11.007674624 s
  70. JavaPure 22线程实现:
  71. Number of primes under 10000000 is  664579
  72. Time taken is 11.039509868 s
  73. JavaPure 23线程实现:
  74. Number of primes under 10000000 is  664579
  75. Time taken is 11.145095505 s
  76. JavaPure 24线程实现:
  77. Number of primes under 10000000 is  664579
  78. Time taken is 10.952947299 s
  79. JavaPure 25线程实现:
  80. Number of primes under 10000000 is  664579
  81. Time taken is 11.076983555 s
  82. JavaPure 26线程实现:
  83. Number of primes under 10000000 is  664579
  84. Time taken is 10.941116983 s
  85. JavaPure 27线程实现:
  86. Number of primes under 10000000 is  664579
  87. Time taken is 10.94612999 s
  88. JavaPure 28线程实现:
  89. Number of primes under 10000000 is  664579
  90. Time taken is 11.039012597 s
  91. JavaPure 29线程实现:
  92. Number of primes under 10000000 is  664579
  93. Time taken is 10.939461681 s
  94. JavaPure 30线程实现:
  95. Number of primes under 10000000 is  664579
  96. Time taken is 10.995222494 s
  97. JavaPure 31线程实现:
  98. Number of primes under 10000000 is  664579
  99. Time taken is 10.992655984 s
  100. JavaPure 32线程实现:
  101. Number of primes under 10000000 is  664579
  102. Time taken is 10.955971225 s
  103. JavaPure 33线程实现:
  104. Number of primes under 10000000 is  664579
  105. Time taken is 11.044467169 s
  106. JavaPure 34线程实现:
  107. Number of primes under 10000000 is  664579
  108. Time taken is 10.982884492 s
  109. JavaPure 35线程实现:
  110. Number of primes under 10000000 is  664579
  111. Time taken is 10.987279761 s
  112. JavaPure 36线程实现:
  113. Number of primes under 10000000 is  664579
  114. Time taken is 11.023815067 s
  115. JavaPure 37线程实现:
  116. Number of primes under 10000000 is  664579
  117. Time taken is 11.085869652 s
  118. JavaPure 38线程实现:
  119. Number of primes under 10000000 is  664579
  120. Time taken is 10.986662023 s
  121. JavaPure 39线程实现:
  122. Number of primes under 10000000 is  664579
  123. Time taken is 10.963607354 s
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

ITPUB技术栈

ITPUB技术栈是ITPUB企业打造的垂直于IT领域的知识社群平台,在这里,你既可以是创作者也可以是消费者。如果你的IT生涯丰富多彩,喷薄的个人价值尽可在小栈内体现;如果你渴望找到志同道合的伙伴,拓宽人脉,小栈比跑会场更快。 小栈特色:
1.极高的用户转化率,实现更直接的知识变现;
2.随时随地,刷个朋友圈的时间,实现更长效的信息沉淀;
3.戳痛、难点的专业咨询,更接近成功解决方案的时刻;
4.贴近意见领袖,个人高速成长,迈入更富有价值的人际圈。

----------------------------------------

技术小栈>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP