对于在学校的作业我被要求创建一个简单的程序,创建1000个文本文件,每个文件具有随机数量的行,通过多线程\单个进程计算有多少行.而不是删除那些文件.
现在测试过程中发生了一件奇怪的事情 - 所有文件的线性计数总是比以多线程方式计算它们要快一点,这已经激发了我课堂圈内的学术理论化课程.
当Scanner用于读取所有文件时,一切都按预期工作 - 在500毫秒线性时间和400毫秒线程时间读取1000个文件
然而,当我使用BufferedReader时间下降到大约110ms线性和130ms线程.
哪部分代码会导致这个瓶颈?为什么?
编辑:只是为了澄清,我不是问为什么Scanner工作慢于BufferedReader.
完整的可编译代码:(虽然你应该改变文件创建路径输出)
import java.io.*;
import java.util.Random;
import java.util.Scanner;
/**
* Builds text files with random amount of lines and counts them with
* one process or multi-threading.
* @author Hazir
*/// CLASS MATALA_4A START:
public class Matala_4A {
/* Finals: */
private static final String MSG = "Hello World";
/* Privates: */
private static int count;
private static Random rand;
/* Private Methods: …Run Code Online (Sandbox Code Playgroud) 我一直在测试C中点的编码操作,我经历了一个我无法解释的奇怪现象.
以下代码只是实例化四个双变量并接收用户输入以填充所有变量.
奇怪的是注释掉的行,当没有注释行时代码按预期工作,但是当我注释掉它时,循环中的分段失败.
我一直在编写这个测试 c9.io
码:
#include <stdio.h>
int main() {
double i, a, b, c, d;
double * cur = &a;
char ch = 'a';
// printf("a - %p\nb - %p\nc - %p\nd - %p\n",&a, &b, &c, &d);
for (i=0; i<4; i++) {
printf("Enter %c: ", ch++);
scanf("%lf", cur++);
}
printf("a - %lf\nb - %lf\nc - %lf\nd - %lf\n",a, b, c, d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不知所措,为什么打印地址绕过分段失败?