所以我很好奇如何使用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中完成.那
关于并行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) 我对这个话题发表了各种各样的意见,所以这就是我决定在这里问的原因.我的问题是从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)