小编Zah*_*ari的帖子

消费休息服务的功能方式

所以我很好奇如何使用java8流API更好地重写以下代码.

public static List<FlightInfo> getResults(String origin,List<String> destinations)  {

    final String uri = "https://api.searchflight.com/;
    List<FlightInfo> results = new LinkedList<FlightInfo>();

    for(String destination:destinations) {


            RestTemplate restTemplate = new RestTemplate();

            String params = getParams(origin,destination);
            FlightInfo result = restTemplate.postForObject(uri+params,FlightInfo.class);

            results.add(result);
    }

    return results;

}
Run Code Online (Sandbox Code Playgroud)

在完成此方法之后,我正在做它正在做的事情并且我收到了FLightInfo对象的列表,我将它转换为流并将对其进行各种转换(分组依此类推).现在很明显这是一个长期运行的操作.此外,它实际上将多个休息调用组合到Web服务,所以我已经拥有了在上次调用时获得的大部分数据,但是在整个方法返回之前我不会开始处理它.

有没有办法做更多反应性的事情?我可以立即返回一个流并对该流进行操作,因为它来自管道,或者这有点太多了?如何在Java 8中完成.那

java rest lazy-evaluation java-8 java-stream

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

并行I / O SSD与HDD的惊人结果

关于并行I / O的一些测试中发生了一个非常奇怪的情况。这是一种情况。我有多个线程将文件处理程序打开到同一文件,并从文件的多个位置(均匀间隔)读取有限数量的字节并将其转储到数组中。所有这些都是通过增强线程完成的。现在,我假设由于随机访问的原因,HDD应该更慢。这就是为什么我的测试实际上针对SSD的原因。事实证明,与HDD相比,从固态磁盘读取同一文件时,几乎没有任何加速。想知道问题可能是什么?这对我来说是否真的很令人惊讶/我也在下面发布了我的代码以查看我的实际工作:

    void readFunctor(std::string pathToFile, size_t filePos, BYTE* buffer, size_t buffPos, size_t dataLn, boost::barrier& barier) {

        FILE* pFile;
        pFile = fopen(pathToFile.c_str(), "rb");

        fseek(pFile, filePos, SEEK_SET);
        fread(buffer, sizeof(BYTE), dataLn, pFile);

        fclose(pFile);
        barier.wait();

    }

    void joinAllThreads(std::vector<boost::shared_ptr<boost::thread> > &threads) {

        for (std::vector<boost::shared_ptr<boost::thread> >::iterator it = threads.begin(); it != threads.end(); ++it) {
            (*it).get()->join();

        }

    }

    void readDataInParallel(BYTE* buffer, std::string pathToFile, size_t lenOfData, size_t numThreads) {
        std::vector<boost::shared_ptr<boost::thread> > threads;
        boost::barrier barier(numThreads);
        size_t dataPerThread = lenOfData / numThreads;

        for (int var = 0; var < …
Run Code Online (Sandbox Code Playgroud)

c c++ io parallel-processing solid-state-drive

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

CUDA支持64位数

我对这个话题发表了各种各样的意见,所以这就是我决定在这里问的原因.我的问题是从CUDA支持的int64_t计算能力开始.我在Quadro770M上运行cuda 5,下面的代码没有问题,但我读到从计算能力1.3开始支持64位无符号.那么这个问题的真正答案是什么?

__device__ void printBinary(int64_t a) {
    int bits[64];
    int i;

    for (i = 0; i < 64; i++) {
        bits[63 - i] = (a >> i) & 1; 
    }

    for (int i = 0; i < 64; ++i) {
        cuPrintf("%d", bits[i]);
    }
    cuPrintf("\n");
    cuPrintf("%016llX", a);
}
Run Code Online (Sandbox Code Playgroud)

64-bit cuda nvidia

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