Сергей-4030: Все сообщения за 3 Июля 2007 года

 
ПнВтСрЧтПтСбВс
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

Сергей-4030

исключающий третье
★★
А у меня пополнение инструментов. Вернее, смена. Мне тут надо было пилить бетон и моя старая ручная циркулярка сгорела на этом. И по этому поводу я выработал новую стратегию - сначала покупать дешевые инструменты, а потом, по мере их выгорания - дорогие. То есть, если дешевый работает себе долго - и пусть его, нет смысла дорогой покупать. А если горит - значит, данный вид работ я выполняю в объемах, превышающих "любительский" уровень. Так что купил самый что ни есть хай-енд - Макиту за 120 баков. И разница офигительная, между прочим! На пилении дерева не так заметно, а вот бетон Макита пилит легко и просто, не напрягаясь. А старая пила постоянно затыкалась, грелась и в конце концов умерла.

Что интересно - с виду ничего особенного. Вид у многих других посерьезнее будет. ;)
makita.jpg (скачать) [400x400, 25 кБ]
 
 
 

Сергей-4030

исключающий третье
★★
Balancer> Вот работающий под Java вариант (без шедулера):
Balancer> Работает 4 секунды. Т.е. в Java имеем десятикратный выигрышь :)

А зачем нужно это? В чем сакральный смысл? :)

Я имею в виду - (new Thread(new TestThread(i))).start()

Почему не наследовать TestThread от Thread и потом (new TestThread(i)).start() ?

ЗЫ На практике, такое решение не будет хорошо работать. Если 10 тысяч тредов просто ждут - ну, пусть. Если нет - попа. Не говоря о том, что тест, собственно, ни о чем. Тест нам говорит вот что: добавить 10000 записей в очередь на создание новой нити плюс отработать неизвестно сколько методов sleep(недешевых, между прочим), занимает 4 секунды.

Если изменить программу так:


package samples;

public class ThreadSample extends Thread {

static final int NUM_SAMPLES = 10000;

static volatile int count = NUM_SAMPLES;

static Object lock = new byte[0];

int n;

ThreadSample (int n)
{
this.n = n;
}

public void run()
{
synchronized(lock) {
count-;
}
}

public static void main(String[] args)
{
long in=System.currentTimeMillis();
for (int i = 0; i < NUM_SAMPLES; i++)
{
(new ThreadSample(i)).start();
}
while(count>0);
long out=System.currentTimeMillis();
System.out.println("time="+((out-in)/1000.));
}
}


То исполнение возьмет 1 секунду. Кстати, переменная lock в данном случае не нужна, но я поставил для общности.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru