Подтвердить что ты не робот

Параллельная сортировка по Java 8 vs Scala параллельная сортировка

Итак, я просто изучал новую Java 8, особенно lambdas, а также дату и время api. Я сравнивал его с scala. Моя основная идея заключалась в том, чтобы найти разницу времени выполнения между императивным, потоковым и параллельным потоком. Поэтому я решил создать приложение библиотеки и выполнить некоторые операции, такие как поиск, фильтрация, сортировка и т.д. Я создал класс библиотеки с полем списка, называемым книгами, и заполнил его 1000 книгами. Затем создал функциональный интерфейс для поиска и выполнил некоторую операцию во всех трех стилях. Все работало нормально. Мой код:

// Functional Interface
interface Search<T> {
    public void search(T t);
}

// Library class
final Library library = new Library();
// This just creates some random book objects.
final List<Book> books = collectBooks();

final Search<List<Book>> parallelSearch = (bks) -> library.findAndPrintBooksParallel(bks);

// Parallel Operations
private void findAndPrintBooksParallel(List<Book> books) {
    books.parallelStream()
        .filter(b -> b.getAuthor().equals("J.K. Rowling"))
        .sorted((x,y) -> x.getAuthor().compareTo(y.getAuthor()))
        .map(Book::getIsbn)
        .forEach(Library::waitAndPrintRecord);
}

Теперь я попытался воссоздать одну и ту же программу в scala и посмотреть, выполняется ли выполнение быстрее или нет? Удивительно, но scala не позволял мне выполнять параллельную сортировку (или, может быть, я здесь незнаю). Моя библиотека scala

// Again some random book objects as a list
val books = collectBooks

// Parallel operation
books.par filter(_.author == "J.K. Rowling") map (_.isdn) foreach waitAndPrint

Здесь books.par дает ParSeq. У этого метода сортировки нет. Есть ли способ создать параллельную сортировку с моим списком книг в scala. Поэтому я мог написать что-то вроде:

books.par filter(_.author == "J.K. Rowling") sortWith (_.author < _.author) map (_.isdn) foreach waitAndPrint

Ваша помощь очень ценится. Спасибо.

4b9b3361

Ответ 1

Можно реализовать параллельный вид в scala, например. http://blog.yunglinho.com/blog/2013/03/19/parallel-external-merge-sort/. Я не знаю, почему ParSeq не предлагает сортировку в своем API. Обратите внимание, что существует ряд альтернатив .par, поэтому не обязательно предполагайте, что ваши результаты ParSeq являются репрезентативными для scala parallelism в целом. (Но контрольные показатели ценны, и я желаю вам успехов с вами).

Ответ 2

Я очень новичок в scala, но, насколько я понимаю, сам сорт никогда не будет параллельным, может быть только преобразование в и из массива Java. отсортировано по scala.collection.SeqLike only Попробуйте эту ссылку: GitHub.Com/ Scala/scala/BLOB/Master/SRC/library/Scala/коллекция/...