小编Haz*_*Bot的帖子

MultiThread运行速度比单个进程慢

对于在学校的作业我被要求创建一个简单的程序,创建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)

java multithreading bufferedreader java.util.scanner

7
推荐指数
2
解决办法
1702
查看次数

为什么printf()在使用指针时绕过分段失败?

我一直在测试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)

我不知所措,为什么打印地址绕过分段失败?

c printf pointers scanf segmentation-fault

1
推荐指数
1
解决办法
92
查看次数