Multi Threads пишут несколько файлов, но это влияет друг на друга - PullRequest
0 голосов
/ 04 июня 2018

Когда я запускаю один поток для записи в файл, это занимает около 400 миллисекунд, но я запускаю три или более потоков, каждый поток записывает файл, это занимает около 1000 миллисекунд, все эти потоки меняются медленно, какэто случилось?

вот мой код

package practice.feature.java.core.thread;

import java.io.File;
import java.io.FileWriter;

public class MainEnter {

public static void main(String[] args) {
    for (int i = 0; i < 1; i++) {
        WriteFile file1 = new WriteFile("WriteFile" + i + ".txt");
        new Thread(file1).start();
    }
}

static class WriteFile implements Runnable {
    private String name;

    public WriteFile(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        Long now = System.currentTimeMillis();
        File file = new File(name);
        try {
            file.createNewFile();
            FileWriter versionWriter = new FileWriter(file, true);
            for (long i = 0; i < 1000000L; i++) {
                versionWriter.write(name + "****" + i);
                versionWriter.write(System.getProperty("line.separator"));

            }
            versionWriter.flush();
            versionWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Long newnow1 = System.currentTimeMillis();
        System.out.println(name + "导出时间:" + (newnow1 - now));
    }
}
}

1 Ответ

0 голосов
/ 04 июня 2018

Когда вы закрываете файл, он записывается на диск операционной системой.Я подозреваю, что у вас есть жесткий диск, который обычно ограничен до 40 МБ / с.Запись большего количества файлов одновременно может приблизить вас к максимальной пропускной способности диска, но вы не увидите значительного улучшения.

ПРИМЕЧАНИЕ: SSD работает быстрее, но типичный диск по-прежнему ограничен до 500 МБ / с

Короче говоря, добавление большего количества потоков не ускоряет работу вашего диска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...