Я хочу написать программу сортировки слияния в C# с четырьмя потоками. В этой программе каждый поток имеет некоторые числа, которые сортируются в их потоках. Я объясню их примером: в первом потоке есть 100 номеров. Этот поток сортирует эти числа с сортировкой слияния, а затем передает их во второй поток. Второй поток, сам имеет 100 номеров и сортирует их числа с номерами, которые были переданы из первого потока. Опять же после сортировки данных во втором потоке все 200 номеров переходят к третьему потоку, чтобы отсортировать эти числа с номерами третьего потока и, наконец, все числа в четвертом потоке, сортируются с номерами четвертого потока, и результат показан. Я знаю, что в этом случае простой последовательный метод сортировки, вероятно, быстрее, чем сортировка слияния, но я должен сделать сортировку таким образом для моего школьного проекта, а также эти 100 номеров для каждого потока были только примером, и в моем проекте каждый поток имеет более 100 номера. Я хочу сортировать числа с сортировкой слияния с четырьмя потоками. У меня особенно проблема передачи чисел между потоками. Я новичок в C#, и если это возможно, пожалуйста, помогите мне с кодом. Благодарю.Объединить сортировку с четырьмя потоками в C#?
ответ
Из сценария, который вы объяснили, это похоже на последовательный процесс. Один поток ждет результата другой нити.
Но я думаю, что если вы действительно хотите сортировать, предположите 100 чисел, используя 4 потока, затем передайте 25 номеров каждому потоку и вызовите сортировку слияния в каждом потоке. Когда каждый поток выполняется сортировкой, в конце 1-й итерации у вас есть 4 отсортированных массива. Теперь передайте 2 отсортированных массива в каждый поток и вызовите MERGE слияния сортировки по каждой теме. (На этом этапе вы используете только 2 потока). Как только это слияние выполнено, вы остаетесь с двумя отсортированными массивами. Вы можете передать 2 отсортированных массива в любой поток и вызвать MERGE (не слияние сортировки).
Я думаю, что если вы google трудно, вы получите решение в Интернете. http://penguin.ewu.edu/~trolfe/ParallelMerge/ParallelMerge.html
Параллельный слияние не обязательно будет быстрее, чем простой последовательный метод сортировки. Только после того, как у вас будет большое количество элементов для сортировки (обычно это намного больше, чем подходит в кеш-памяти процессора 64 КБ, то есть десятки тысяч из 4 байтовых целых чисел), у вас есть выделенные ядра и они могут разбить данные по этим ядрам , вы начнете видеть какие-либо выгоды. Для небольших объемов данных параллельный подход будет на самом деле медленнее из-за необходимости дополнительной координации и распределения.
В C# есть встроенные методы для этого типа разбиения. PLINQ был создан специально для таких задач.
Существует несколько существующих статей/сообщений в блогах, в которых обсуждается решение параллельного сортирования слияния с использованием PLINQ, которое можно найти в googling «plinq merge sort».
Два, в частности, обеспечивают некоторые охвата глубины и включают в себя некоторые бенчмаркинг по сравнению с последовательной сортировки можно найти здесь:
http://blogs.msdn.com/b/pfxteam/archive/2011/06/07/10171827.aspx http://dzmitryhuba.blogspot.nl/2010/10/parallel-merge-sort.html
Благодарю. да, я знаю, что сортировка слияния в этом примере не быстрее, чем простой последовательный метод сортировки, но я должен сортировать таким образом для моего школьного проекта, а также эти 100 номеров для каждого потока были только примером, и в моем проекте каждый поток имеет больше, чем это. –
- 1. Объединить сортировку в C
- 2. Объединить сортировку в Objective-C
- 3. Объединить сортировку в javascript
- 4. Объединить сортировку символов в строке C
- 5. Объединить сортировку в C, давая неправильные результаты
- 6. Объединить сортировку удалить дубликаты
- 7. Объединить сортировку с помощью Итераторы
- 8. Как объединить файл данных с четырьмя столбцами
- 9. Объединить сортировку слияния
- 10. Объединить сортировку связанного списка
- 11. Объединить сортировку, часть рекурсии
- 12. Объединить сортировку списка слов
- 13. Объединить сортировку - схема
- 14. Объединить сортировку - ошибки в коде
- 15. Объединить сортировку с массивами в java
- 16. Объединить сортировку, вызывающую переполнение стека?
- 17. Объединить сортировку для f sharp
- 18. Объединить сортировку для решения задачи
- 19. Java - Объединить сортировку со строками
- 20. Объединить сортировку по неработающим структурам
- 21. Объединить сортировку с большим числом целых чисел
- 22. «Ошибка сегментации: ошибка 11» в процессе с четырьмя потоками. Программа C
- 23. Объединить сортировку, где сохранены подсписки?
- 24. Объединить сортировку с использованием нескольких динамических массивов
- 25. Объединить сортировку python бесконечный цикл
- 26. Объединить сортировку в ArrayList в Java
- 27. Как объединить один массив nump с массивом с четырьмя столбцами?
- 28. Объединить сортировку по объекту в векторе
- 29. Объединить сортировку со связанными цепями в java
- 30. Проблемы с потоками в C#
вы можете сделать это с помощью [ContinueWith] (https: // MSDN. microsoft.com/en-us/library/dd270696%28v=vs.110%29.aspx) из 'Task' –
, поскольку все данные зависят от предыдущих« потоков », нет необходимости в потоках, я бы сказал, – Icepickle