1 / 1 / 1
Регистрация: 05.04.2013
Сообщений: 225

Многопоточность

29.03.2014, 17:59. Показов 3266. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Тяжелая однако для меня тема многопоточности. Столкнулся вот с такой вот задачей, над которой уже несколько дней "бодаюсь". Помогите пожалуйста разобраться:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ExecutorService executor= Executors.newFixedThreadPool(SIZE_POOL);
        
        for (int i=0; i<favorite.length; i++)
        {   
            Task_Get.favorite=favorite[i];
            Runnable task=new Task_Get();
            //task.run(); 
            executor.execute(task);
            all_favorite.put(favorite[i], Task_Get.address);
            Task_Get.address.clear();
        }
        executor.shutdown();
        try {
            executor.awaitTermination(10, TimeUnit.SECONDS);
            printerFile(all_favorite);
            }
        catch (IOException e) {
            e.printStackTrace();
            } 
        catch (InterruptedException e) {
            System.out.println("Server is overloaded"); 
            e.printStackTrace();
        }
Собственно проблема в том, что процессы по всей видимости спорятся. Так как существует массив favorite а передаются значения как то хаотично, либо вообще выполняется один и тот же, причем то первый то второй(возможно потому что пока что массив всего из 3-х значений). Подскажите что я не так делаю или что нужно изменить, или где нужна синхронизация ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2014, 17:59
Ответы с готовыми решениями:

Многопоточность
Здравствуйте, что-то у меня не выходит ... Должно быть так А . . В А . . В А . . В ... и т.д.

Многопоточность
сделать Дизайн приложения, по крайней мере из двух нитей: - Один для обработки массива - Один для написания результатов в файл.из 2...

Многопоточность
Мне нужно что бы сообщение System.out.println(String.format(&quot;%1$s будит парикмахера.&quot;, client.getName())); выводилось только один раз. В...

24
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
02.04.2014, 19:02
Студворк — интернет-сервис помощи студентам
IGROK@,
касательно общего дизайна. Для задач которые выдают результат, лучше использовать Callable<T> вместо Runnable, тогда соотв. Future будет возращать результат.
И не нужно будет извращаться с передачей результатов через стат. структуры.
И не нужен будет отдельный шаг ожидания.
примерно так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Task_Get implements Callable<String>{
   Task_Get(String fav, String text){
      ...
   }
 
   public String call(){
     ....
   }
}
 
List<Future<String>> futures = new ArrayList<Future<String>>();
for (int i=0; i<favorite.length; i++) {   
   futures.add(executor.submit(new Task_Get(favorite[i], text)));
}
for (int i=futures.size();i-->0;) {   
   all_favorite.put(favorite[i], futures.get(i).get());
}
Касательно потоков. Все зависит от памяти, числа процессоров, ОС.
10 000 пока считается очень много. Разумным числом считается порядка 1000.
1
1 / 1 / 1
Регистрация: 05.04.2013
Сообщений: 225
03.04.2014, 00:02  [ТС]
Цитата Сообщение от bigwhitefish Посмотреть сообщение
И не нужен будет отдельный шаг ожидания.
bigwhitefish, Т.е. Вы хотите сказать, что такой метод решения, будет работать быстрее, стабильнее и надежней ? Или это общепринятая модель ?
Цитата Сообщение от bigwhitefish Посмотреть сообщение
Все зависит от памяти, числа процессоров, ОС.
да я буду рад, если будет полностью использоваться моё железо, и получится получить результат хотя бы за 1 секунду. )) Мне нужно найти в 10 массивах содержащих в себе приблезительно по 10 - 15 тыс чаров, совпадение от 3 до 64 значений подряд. Каким образом можно это сделать быстро ? я подумывал запустить в многопоточном режиме сравнение, где каждый поток принимает 3 (или 64) значения которые нужно найти, и сверяет согласно принятому индексу до N-3 (или N-64) (рассуждение теоретическое, не знаю как оно получится и будет ли работать) И таких потоков умножить на 10. Т.е. в итоге должно получится: 10 потоков, внутри которых бежит по 10-15 тысяч ))) Для чего? Нужна скорость. Подскажите или предложите другой вариант, что бы я не наломал дров... )))

Добавлено через 1 минуту
Цитата Сообщение от bigwhitefish Посмотреть сообщение
10 000 пока считается очень много. Разумным числом считается порядка 1000.
мдя... Видимо не разумно я думал.
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
03.04.2014, 10:58
Цитата Сообщение от IGROK@ Посмотреть сообщение
bigwhitefish, Т.е. Вы хотите сказать, что такой метод решения, будет работать быстрее, стабильнее и надежней ? Или это общепринятая модель ?
Сравнение по "стабильнее и надежней" я не приемлю.
Решения бывают корректные и некорректные, бинарная система.
Корректные решения могут быть более или менее красивыми.
Красивые - значит более короткие, читабельные (за исключением случаев, когда применяется какой-то нетривиальный алгоритм), и быстрые. Как правило, не знаю почему, эти качества ходят вместе.

Насчет общепринятости не знаю (среди кого?), но сам предпочитаю- это использовать по максимуму проверенные АПИ, и стремиться к корректности и красоте.

Добавлено через 4 минуты
Цитата Сообщение от IGROK@ Посмотреть сообщение
да я буду рад, если будет полностью использоваться моё железо, и получится получить результат хотя бы за 1 секунду. )) Мне нужно найти в 10 массивах содержащих в себе приблезительно по 10 - 15 тыс чаров, совпадение от 3 до 64 значений подряд.
Тут работы на миллисекунду, если не меньше, для какого нибудь атома. Какие потоки, вы что?
0
1 / 1 / 1
Регистрация: 05.04.2013
Сообщений: 225
03.04.2014, 11:04  [ТС]
Цитата Сообщение от bigwhitefish Посмотреть сообщение
Красивые - значит более короткие, читабельные (за исключением случаев, когда применяется какой-то нетривиальный алгоритм), и быстрые. Как правило, не знаю почему, эти качества ходят вместе.
Спасибо, понял, буду пробовать переписать. ))

Цитата Сообщение от bigwhitefish Посмотреть сообщение
Тут работы на миллисекунду, если не меньше, для какого нибудь атома. Какие потоки, вы что?
подтолкните на мысль, каким методом можно достичь самого быстрого результата ?

Цитата Сообщение от bigwhitefish Посмотреть сообщение
Какие потоки, вы что?
ну я просто осваиваю многопоточность, по этому все мысли только в эту сторону ))
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
03.04.2014, 13:48
Цитата Сообщение от IGROK@ Посмотреть сообщение
подтолкните на мысль, каким методом можно достичь самого быстрого результата ?
По вашему описанию, там простейший однопроходный алгоритм. Размер данных - 150 000 - очень маленький.
Чтобы появился заметный эффект от параллельной обработки, размер данных должен быть хотя бы на 3 порядка больше.
Тогда можно делать обработку каждого массива в в отдельном потоке.

Оптимальное количество потоков в этом случае (т.е. когда узкое место - процессор) равно количеству ядер, включая виртуальные.

Если бы вы получали данные с удаленных серверов, то они и былы бы узким местом, в этом случае оптимальное число потоков - чем больше, тем лучше.

Если вы хотите развиваться, я бы порекомендовал два направления.
1. Воскурить какую-нибудь брахманскую литературу по устройству ОС, какого-нибудь Танненбаума, можно 20-25 летней давности.
2. Постоянно курить Java Memory Model в любых видах, начиная с ее объяснений для чайников. Ссылки найдете сами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2014, 13:48
Помогаю со студенческими работами здесь

Многопоточность
Добрый день, уважаемые гуру многопоточного программирование. Если Вас не затруднит, ответьте пожалуйста на несколько вопросов: 1 К...

Многопоточность
Данный код должен в теории выдавать произвольное число (в определенном интервале). У меня четко каждый раз 200 000. В чем ошибка? ...

Многопоточность
Люди, не могли бы вы на пальцах объяснить, что такое пул потоков, а то перечитал тучу статей, а все равно не совсем представляю себе что...

Многопоточность
Доброго времени. Не могу сообразить как сделать: Задача: Методы класса Main вызываются из разных потоков. Нужно получить статистику...

Многопоточность NullPointerException
Кто-нибудь может подсказать, почему при k=2 и z=1 выбрасывается ошибка NullPointerException и как побороть данную проблему? class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru