小编Ivá*_*res的帖子

使用 STDOUT(屏幕)与常规文件的性能

我一直在做一些研究,我得到了这种情况。如果您想写入 STDOUT(屏幕),您将无法执行多线程脚本,该脚本比简单的单线程脚本更快地打印数据。但是,如果您写入这样的文件:

myPrinter.perl > myPrint
Run Code Online (Sandbox Code Playgroud)

结果发生了变化,您可以看到多线程方法获得了更好的时间。我的疑问是,由于 STDOUT(屏幕)或输出文件都是共享资源,访问时间不会相似吗?为什么多线程方法只能更好地写入文件?

我在实验中使用的 perl 脚本是:

单线程

for my $i  (1..100000000){
    print("things\n");
}
Run Code Online (Sandbox Code Playgroud)

多线程

use threads;
use Thread::Queue 3.01 qw( );

use constant NUM_WORKERS    => 4;


sub worker {
    for my $i (1 .. 25000000){
        print("things\n");
    }
}

my $q = Thread::Queue->new(); #::any

async { while (defined( my $job = $q->dequeue() )) { worker($job); } }
for 1..NUM_WORKERS;

for my $i (1 .. 4){
    $q->enqueue($i);
}

$q->end();
$_->join for threads->list; 
Run Code Online (Sandbox Code Playgroud)

积分:队列实现取自池上的答案之一。

perl performance multithreading stdout file-handling

6
推荐指数
2
解决办法
1945
查看次数

决定(在Haskell中)数字是否是不使用列表的回文

我需要检查Haskell,如果一个四位数是一个回文,问题是我不能使用列表,尽管有一个固定的数字,我应该使用递归.我一直在想这个问题,我无法使用递归获得解决方案.我能得到的最接近的是:

pldrm :: Integer -> Bool
pldrm x
    |x > 9999 = False
    |x > 999 = (div x 1000 == mod x 10) && (mod (div x 100) 10) == div (mod x 100) 10
    |otherwise = False
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?谢谢

haskell list declarative palindrome

5
推荐指数
3
解决办法
2137
查看次数