Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прибить поток по таймауту 
V
    Опции темы
Vermut
Дата 27.2.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 26.12.2008

Репутация: нет
Всего: 0



Цитата

Решено было запускать либу в отдельном потоке, при достижении таймаута поток прибивать, пытаться повторить попытку еще пару раз (как правило на следующий раз сразу все ok) и затем переходить к следующему файлу

Особого рилтайма не наблюдается так почему бы  весь этот глючный код на отдельной JVM не запустить? через Runtime.exeс(args), у вас TimeLimit на один файл 120 секунд, время на запуск JVM много меньше. 

Собственно плюсы:
 - Когда запущенная JVM(камера пыток) закроется, операционная система утилизирует и незакрытые повисшими потоками файловые дескрипторы. 
- Если либа такая глючная, то лучше её изолировать от общества не в отдельных потоках окруженных try/catch или снабженных обработчиком uncaughtException, а в другом процессе(адресном пространстве), я б прежде чем её запускать, вообще бы бэкап исходных файлов на всякий случай делал. 

А любое использование либы в одной JVM с вашим приложением приведет к снижению его производительности, потому как она своими номерами поставит в тупик любой  оптимизатор времени выполнения. Мало ли какие ресурсы помимо  файлов эта либа удерживает: память, блокировки, а может она внутри себя трэды запускает тогда вообще пиши пропало.

Это сообщение отредактировал(а) Vermut - 27.2.2009, 23:20
PM MAIL   Вверх
Vermut
Дата 28.2.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 26.12.2008

Репутация: нет
Всего: 0



Да не побьют меня модераторы smile 
Я сейчас винраром файл 7.5Gb распаковывал, ушло 8 с половиной минут. Вспомнил о вас. Собственно говоря вспомнил, что вы жестко таймаут задаёте. Рекомендую задавать его эмпирически на основе FileSize.

PM MAIL   Вверх
yuliada
Дата 24.3.2009, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 16.2.2009
Где: Иркутск - San Die go

Репутация: нет
Всего: нет



Переписала с запуском отдельной jvm, работает. Может пригодится кому как это написать примерно:
Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 *
 * @author Yulia
 */
public class Main {

    public static class StreamGobbler extends Thread {

        InputStream is;
        String type;

        public StreamGobbler(InputStream is, String type) {
            this.is = is;
            this.type = type;
        }

        public void run() {
            try {
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                while ((line = br.readLine()) != null) {
                    System.out.println(type + "> " + line);
                }
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        String curDir = System.getProperty("user.dir");
        String classPath = System.getProperty("java.class.path", ".");
        ProcessBuilder pb = new ProcessBuilder("java.exe", "test.SomeProcess");
        pb.environment().put("CLASSPATH", classPath);
        pb.directory(new File(curDir));
        final Process p = pb.start();
        StreamGobbler err = new StreamGobbler(p.getErrorStream(), "ERROR");
        StreamGobbler out = new StreamGobbler(p.getInputStream(), "OUT");
        err.start();
        out.start();
        Runnable runnable = new Runnable() {

            public void run() {
                p.destroy();
            }
        };
        Runtime.getRuntime().addShutdownHook(new Thread(runnable));
                long time = System.currentTimeMillis();
        int exitValue = 0;
        boolean stillWorking = true;
        while (System.currentTimeMillis() - time < TIMEOUT) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException ex) {
            }
            try {
                exitValue = p.exitValue();
                stillWorking = false;
                break;
            } catch (IllegalThreadStateException ex) {
            }
        }
        if (stillWorking) {
            p.destroy();
            System.out.println("Timeout");
        } else {
            System.out.println("" + exitValue);
        }
    }
}



Это сообщение отредактировал(а) yuliada - 24.3.2009, 04:53
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0829 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.