Büyük dosyaları indirdiğim, bunları çözümlediğim ve daha sonra dosyadan aldığım verileri başka bir dosyaya yazdığım bir program çalıştırıyorum.Bir "Zincirler Zinciri" bu Java uygulaması için kötü bir çözüm mü?
Dosyaların indirilmesi ve ayrıştırılması uzun zaman alır, ancak yazma görevi yalnızca bir dakika kadar sürer. Beraber attığım çözümüm, üç parçanın üç sabit yüzdesine sahip olmaktı.
ExecutorService downloadExecutor = Executors.newFixedThreadPool(3);
ExecutorService parseExecutor = Executors.newFixedThreadPool(3);
ExecutorService writeExecutor = Executors.newFixedThreadPool(3);
indirme havuzunda bir iş parçacığı sonra bir parametre olarak dosya adına sahip, çözümleyici threadpool için yeni bir iş parçacığı gönderir dosya indirir. Bu iş parçacığı içinde yapılır. İndirme iş parçacığı daha sonra dosya URL'lerinin listesinden başka bir dosyayı indirmeye çalışır.
Ayrıştırıcı iş parçacığı, dosyadan istediğim verileri ayrıştırmayı bitirdikten sonra, daha sonra bir .csv dosyasına yazıldığı yazma iş parçacığına verileri içeren yeni bir iş parçacığı gönderir.
Sorum şu, bunun için daha zarif bir çözüm varsa. Gerçekten çok karmaşık bir iş parçacığı yapmadım. İndirmek ve ayrıştırmak için çok fazla dosyam olduğundan, herhangi bir zamanda iş parçacığının boşta kalmasını istemiyorum. Bir kez daha, bir dosya ayrıştırmak biraz zaman alabilir, bu yüzden ilk önce bu dosyaları indirmek için ayrılmış ayrı konuları yapmak olabilir.
Daha önce de belirttiğim gibi, bu dosyalar boyut olarak birkaç GB olabilir. Ayrıştırma işleminin tamamlanması 30 dakikadan bir saat sürebilir. Mantığım, dosyanın yeni bir dosya indirilmeden önce ayrıştırılmasını beklemek yerine, dosyaları indirmeye devam edecek ayrı konuları ayırmak ve aşağı indiğinde bu dosyayı iş parçacığına göndermektir. Bu ayrıştırma bekleyen bir dosya kuyruğu ile sonuçlanacaktır. Bana daha verimli geliyor. – GreenGodot
En basit olanı ilk @GreenGodot yapın. Genel işleminiz yine de en yavaş kısımla sınırlıdır ... gerçekten diskte bekleyen yüzlerce GB dosyasının olmasını ister misiniz? – Dennis
Herhangi bir yardımcı olursa, dosyayı ayrıştırmayı bitirdiğimde, indirilen dosyayı File.delete() kullanarak silerim. uzay problemini tamamen çözmez ama bu yardımcı olur mu? – GreenGodot