草庐IT

async_send

全部标签

c++ - 为什么使用 std::async 时通过 const ref 传递速度较慢

作为学习std::async的练习我写了一个小程序,计算大vector的总和,分布了很多线程。我的代码如下#include#include#include#includetypedefunsignedlonglongintmyint;//CalculatesumofpartoftheelementsinavectormyintpartialSum(conststd::vector&v,intstart,intend){myintsum(0);for(inti=start;iv(vectorSize);std::vector>partial(nThreads);myinttot=0;//

c++ - 写入套接字时使用 write() 而不是 send() 的性能影响

我正在使用典型的套接字API在Linux平台上用C++编写网络应用程序,并且我正在研究将字节数组写入TCP流的两种替代方法:通过调用write()或通过调用发送()。我知道,由于这是Linux,套接字句柄只是一个文件描述符,因此对套接字执行read()和write()调用是有效的,但是套接字API还提供了send()和recv()函数来执行相同的任务。因此,我想知道是否有任何特别的理由选择一类函数而不是另一类——发送/接收函数是否针对网络写入/读取进行了优化,它们的性能是否更好等?或者我使用哪些功能真的很随意?read()和write()在所有情况下都能正常运行吗?感谢您的任何见解!

c++ - N*(connect + send + close) vs (Nagle disable + connect + N*send + close),N > 1

我是套接字编程的新手(正如您已经从我的愚蠢问题中弄清楚的那样),但不要让我感到羞耻,我正在使用TCPposix编写程序。我的约束如下:从客户端发送到服务器的消息应该被读取为字节流,虽然我的应用程序性能不高,但消息应该尽快传递。我编写了一个TCP客户端类,目的是执行以下操作:1次连接-多次发送-1次在流式传输结束时关闭。问题是消息没有近乎实时地传递(我假设它等待有一个更大的包裹更好吞吐量)在网上做了一些研究后,我发现虽然你可以禁用Nagle算法(NA),但这样做是一个非常糟糕的主意。由于我是套接字编程的新手,我不想禁用我不完全理解的功能。所以我有两个(不好的?)选择:连接-发送-关闭每条

c++ - 为什么 std::async 复制它的 const & 参数?

我正在尝试通过使用std::async来加速程序。假设我有一个函数T*f(constT&t1,constT&t2,constT&t3)其中T是一种复制成本很高的类型。我有几个具有不同参数的独立f调用,我尝试将它们与std::async并行化,大致如下:(其中m_futures是正确类型的future的std::vector)。for(...){m_futures.push_back(std::async(std::launch::async,f,a,b,c));}我观察到上面的代码减慢了我的程序的执行速度。我用gdb逐步完成了它,当创建future时,T的复制构造函数被调用了3次。这是

c++ - 为什么 std::async 比简单的分离线程慢?

我已经多次被告知,我应该使用std::async来执行带有std::launch::async参数的任务类型(所以它在一个新的执行线程上是很神奇的)。在这些陈述的鼓舞下,我想看看std::async与:顺序执行一个简单的分离std::thread我的简单异步“实现”我天真的异步实现如下所示:templateautomyAsync(F&&f,Args&&...args)->std::future{std::packaged_tasktask(std::bind(std::forward(f),std::forward(args)...));autofuture=task.get_futu

c# - C# 中的 C++ std::async 与异步/等待

我想知道新的c++特性std::async是否与两个C#关键字async/await相当,如果不是,为什么? 最佳答案 不是真的,假设我正在阅读thisstd::asyncdocumentation正确。C#5的async/await特性涉及异步方法的复杂编译器转换,因此您可以编写看起来非常同步但具有异步点的代码。编译器为您构建状态机,创建适当的回调等。编辑:虽然我之前认为std::async只是强制你显式地传入一个回调,但它看起来比这更原始。无论哪种方式,我相信它主要/完全是library功能,而C#5的异步方法主要是具有库支持的

c++ - 多次使用 std::async 对小任务性能友好吗?

为了提供一些背景信息,我正在处理一个保存的文件,在使用正则表达式将文件拆分为其组件对象后,我需要根据对象的类型来处理对象的数据。我目前的想法是使用并行性来获得一点性能提升,因为加载每个对象是相互独立的。所以我要定义一个LoadObject函数,为我要处理的每种类型的对象接受一个std::string然后调用std::异步如下:voidLoadFromFile(conststd::string&szFileName){staticconststd::regexregexObject("===([^=]+)===\\n((?:.|\\n)*)\\n===END\\1===",std::re

c++ - std::async(std::launch::deferred) + std::future::then 的行为

延迟future背后的想法(仅通过使用std::launch::deferred标志调用std::async实现)是回调仅在以下情况下调用有人试图等待或拉扯future的值(value)或future的异常(exception)。到那时回调还没有被执行。如果我使用std::future::then将延续附加到延迟的future会发生什么?延迟的future会丢失(then使future无效)并返回一个新的future。在这种情况下,按照标准,应该怎么办?新的future也是延迟的future吗?它会只是僵局吗?最新的文档中没有解决这个问题。 最佳答案

c++ - 如何检查 std::async 任务是否完成?

在我的图形应用程序中,我想在另一个线程中生成批处理网格。因此我使用std::async异步调用成员函数。task=async(launch::async,&Class::Meshing,this,Data(...));在我的更新循环中,我尝试检查线程是否准备好。如果是,我会将网格发送到视频卡并开始下一个线程。如果没有,我将跳过这些操作。#includeusingnamespacestd;classClass{public:voidUpdate(){if(task.finished())//thismethoddoesnotexist{Datadata=task.get();//...t

c++ - 在 Visual Studio 中,与 std::async 一起使用时未调用 `thread_local` 变量的析构函数,这是错误吗?

以下代码#include#include#include#includestd::mutexm;structFoo{Foo(){std::unique_locklock{m};std::coutlock{m};std::coutlock{m};std::cout在macOS中编译和运行宽度clang:clang++test.cpp-std=c++14-pthread./a.out得到结果FooCreatedinthread0x70000d9f2000FooCreatedinthread0x70000daf8000FooCreatedinthread0x70000da75000Footh