草庐IT

Async-fork

全部标签

c++ - 关于 std::async 与 std::launch::async 参数启动的线程的混淆

我对std::async函数有点困惑。规范说:asynchronousoperationbeingexecuted"asifinanewthreadofexecution"(C++11§30.6.8/11).现在,这是什么意思?在我的理解中,代码std::futurefut=std::async(std::launch::async,pow2,num);应该在一个新线程上启动函数pow2并将变量num按值传递给线程,然后在将来的某个时间,当函数完成时,放置fut中的结果(只要函数pow2具有类似doublepow2(double);的签名)。但是规范声明“好像”,这让整个事情对我来说有

c++ - 我可以在不等待 future 限制的情况下使用 std::async 吗?

高级我想在异步模式下调用一些没有返回值的函数,而无需等待它们完成。如果我使用std::asyncfuture对象在任务结束之前不会破坏,这会使调用在我的情况下不同步。示例voidsendMail(conststd::string&address,conststd::string&message){//sendingthee-mailwhichtakessometime...}myResonseTypeprocessRequest(args...){//Dosomeprocessingandvaluatetheaddressandthemessage...//Sendingthee-ma

c++ - 为什么从 `std::async` 阻塞返回的 future 的析构函数?

当试图回答另一个Stackoverflowquestion,我意识到这个简单的C++11片段隐式阻塞了调用线程:std::async(std::launch::async,run_async_task)对我来说,这似乎是规范的C++11异步启动任务而不关心结果的方式。相反,为了实现这一点,显然必须显式地创建和分离一个线程(参见answer到提到的问题)。所以这是我的问题:std::future的析构函数必须阻塞的安全性/正确性是否有任何原因?如果它只阻塞在get上还不够吗,否则,如果我对返回值或异常不感兴趣,那它只是一劳永逸? 最佳答案

c++ - 为什么我应该使用 std::async?

我正在尝试深入探索新C++11标准的所有选项,在使用std::async并阅读其定义时,我注意到两件事,至少在linux下使用gcc4.8.1:它被称为async,但它有一个真正的“顺序行为”,基本上在你调用与你的异步函数foofuture的行中/em>,程序会一直阻塞,直到foo的执行完成。它依赖于与其他库完全相同的外部库,以及更好的非阻塞解决方案,这意味着pthread,如果你想使用std::async你需要pthread。在这一点上,我很自然地问为什么选择std::async而不是一组简单的仿函数?这是一个根本无法扩展的解决方案,您调用的future越多,您的程序响应速度就越慢。

javascript - async 函数 + await + setTimeout 的组合

我正在尝试使用新的异步功能,我希望解决我的问题能在未来帮助其他人。这是我正在工作的代码:asyncfunctionasyncGenerator(){//othercodewhile(goOn){//othercodevarfileList=awaitlistFiles(nextPageToken);varparents=awaitrequestParents(fileList);//othercode}//othercode}functionlistFiles(token){returngapi.client.drive.files.list({'maxResults':sizeRes

Go fork/exec 权限被拒绝错误

我最近使用CentOS6.3在我们的服务器上安装了Go。安装似乎很顺利。但是我做了一个测试“helloworld”脚本,当我运行时,我得到以下输出。fork/exec/tmp/go-build967564990/command-line-arguments/_obj/a.out:permissiondenied现在运行goenv或其他go命令似乎可以工作。起初我认为这是一个权限问题,但是以root用户身份运行我得到了同样的结果。一个 最佳答案 我今天遇到了这个问题,但上面的解决方案不起作用。只需运行即可修复我的问题:$exportT

fork - 如何 fork 一个进程

我需要帮助了解如何在Go中妖魔化进程。packagemainimport("fmt""os")funcstart(){varprocAttros.ProcAttrprocAttr.Files=[]*os.File{nil,nil,nil}_,err:=os.StartProcess("/Path/prog",nil,&procAttr)iferr!=nil{fmt.Printf("%v",err)}}funcmain(){start()}如果您在命令行上启动此代码,程序将返回控制权,但仍与cmd连接。关闭cmd关闭程序。如何将它与cmd分离?添加:procAttr.Sys.HideWi

linux - 在 Linux 上更快地 fork 大型进程?

在现代Linux上实现与fork-execve组合从大型进程相同效果的最快、最佳方法是什么?我的问题是进程fork大约500MByte,一个简单的基准测试只能从进程中获得大约50个fork/秒(c​​.f从最小大小的进程中获得大约1600个fork/秒),这对于预期来说太慢了应用。出现了一些谷歌搜索vfork被发明为解决这个问题......但也有关于nottouseit的警告.现代Linux似乎已经获得了相关的clone和posix_spawn调用;这些可能有帮助吗?vfork的现代替代品是什么?我在i7上使用64位DebianLenny(如果posix_spawn有帮助,该项目可以转

c++ - 如何告诉 valgrind 对 fork 进程进行 memcheck?

我有一个进程x,我想用valgrind检查是否存在泄漏。问题是x由y运行,而y又由z运行。我无法独立运行x因为y和z为x设置了环境,例如环境变量,命令行开关,x等所需的文件。有什么方法可以告诉valgrind在z上运行,但要跟踪它找到的任何fork并报告它们?有什么方法可以告诉valgrind跟随任何分支,但只报告名为x的进程?有什么方法可以告诉valgrind附加到已经运行的进程,就像我可以用gdb做的那样?我不知道这是否重要,但我在SuSE64linux和valgrind-2.4.0下运行。谢谢! 最佳答案 在给定--trace

c - 为什么 fork() 在 setsid() 之前

为什么在setsid()之前使用fork()来守护进程?基本上,如果我想将一个进程与其控制终端分离并使其成为进程组领导:我使用setsid()。在没有fork的情况下这样做是行不通的。为什么? 最佳答案 首先:setsid()将使您的进程成为进程组的领导者,但它也会使您成为新session的领导者。如果您只是对获取自己的进程组感兴趣,请使用setpgid(0,0)。现在要了解如果您已经是进程组负责人或session负责人,setsid()返回EPERM的实际原因,您必须了解进程组和sessionid是从创建它们的进程的进程id初始化