Java

Java 8 Tutorial: Arrays.parallelSort

Java 8 Tutorial: Arrays.parallelSort

Trước Java 8, chúng ta thường dùng phương thức Arrays.sort để sắp xếp một array. Trong Java 8 chúng ta có thêm một lựa chọn nữa đó là phương thức Arrays.parallelSort.

Về mặt giải thuật, cả 2 phương thức đều dùng phương pháp sắp xếp trộn (merge sort) để sắp xếp array. Còn về mặt xử lý, cái tên parallel cho thấy sẽ có những xử lý song song trong quá trình sắp xếp bằng cách sử dụng Fork/Join framework được giới thiệu từ Java 7. Nó dựa vào các thread “available” trong thread pool để thực hiện công việc sắp xếp đồng thời.

Demo

Sau đây là đoạn code so sánh thời gian thực hiện việc sắp xếp giữa 2 phương thức Arrays.sort và Arrays.parallelSort

public class ArraysParallelDemo {
  public static void main(String[] args) throws FileNotFoundException {
    List<Double> arraySource = new ArrayList<>();

    Scanner reader = new Scanner(ClassLoader.
        getSystemResourceAsStream("java8demo/large_array_input"));
    while(reader.hasNext()){
      String line = reader.nextLine();
      String[] strNums = line.split(",");
      for ( String strN : strNums){
          arraySource.add(Double.parseDouble(strN));
      }
    }

    System.out.println(arraySource.size());

    Double [] myArray = new Double[1];
    myArray = arraySource.toArray(myArray);
    long startTime = System.currentTimeMillis();
    Arrays.sort(myArray);
    long endTime = System.currentTimeMillis();
    System.out.println("Time take in serial: "+
        (endTime-startTime)/1000.0);

    Double [] myArray2 = new Double[1];
    myArray2 = arraySource.toArray(myArray);
    startTime = System.currentTimeMillis();
    Arrays.parallelSort(myArray2);
    endTime = System.currentTimeMillis();
    System.out.println("Time take in parallel: "+
        (endTime-startTime)/1000.0);

  }
}

Kết quả

Table_ParallelSort2

Graph_ParallelSort2

Không có gì ngạc nhiên khi thấy việc sắp xếp “đa nhân” nhanh hơn sắp xếp trên 1 nhân. Lưu lý là test được thực hiện trên máy tính có CPU 4 nhân.

Kết thúc bài giới thiệu về Arrays.parallelSort trong Java 8 tại đây. Mình rất vui nếu có thể nhận được các đóng góp các ý kiến phản hồi bằng cách comment bên dưới bài viết. Các bạn có thể tham khảo một số bài viết khác trong series Java 8 Tutorial tại đây:
Series Java 8 Tutorial

http://www.edwardthienhoang.wordpress.com

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s