| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > тормозят потоки в java |
| Автор: xma 16.5.2013, 18:53 | ||
| если запускаю пару Thread'ов всё начинает тормозить в 10 раз .. в чём может быть причина ? при этом четыре таких thread'a грузят все 4 ядра на 100% .. а считают каждое медленней раз в 10 , чем если считать всё одним потоком ..
|
| Автор: LSD 16.5.2013, 19:30 |
99% что причина в: |
| Автор: batigoal 16.5.2013, 19:31 |
| xma, а что в выкинутом фрагменте ( // .. )? |
| Автор: xma 16.5.2013, 20:01 |
| о lcd - клёвый мужик - тестировал java на производительность в сравнении с c++ // для каждого потока свой cars - cars1, cars2, cars3, cars4 .. // создаются до входа в первый поток public ArrayList <Car> cars = new ArrayList <Car> (); int num = 3000000 ; cars.ensureCapacity( num ) ; for ( int i=0; i<num; ++i ) { Car car = new Car() ; car.x = (int) (Math.random() * Location.WIDTH); car.y = (int) (Math.random() * Location.HEIGHT); cars.add( car ) ; } в выделенном фрагменте for (int i=0; i<300; ++i) { long time_ms1 = System.currentTimeMillis() ; for ( int j=0 ; j<cars.size(); ++j ) { Car car = cars.get( j ) ; car.x = (int) (Math.random() * Location.WIDTH); car.y = (int) (Math.random() * Location.HEIGHT); } System.out.println(" 1 : Current milliseconds are x"+ i +": " + ( System.currentTimeMillis() - time_ms1 ) + "ms" ); } |
| Автор: chief39 16.5.2013, 23:32 |
| Если int num = 3000000 ; уменьшить до 30000, например, прогрессирующие тормоза при запуске нескольких тредов остаются? |
| Автор: LSD 17.5.2013, 10:45 |
| Выкинуть Math.random() и каждому потоку дать свой собственные java.util.Random |
| Автор: xma 17.5.2013, 20:31 | ||
попёрло . только не стоит создавать по 3 млн. Random в каждом потоке .. прирост в 3.5 раза относительно одного потока . как там с производительностью java , что нового ? |
| Автор: LSD 20.5.2013, 10:43 |
Это еще зачем? Я же сказал: один на поток, достаточно. |