C_and_CPP 板


LINE

trace了一下, launch::deferred|launch::async模式下 确实可以跑到::Concurrency::create_task, 但它是使用整套的PPL(含threadpool) 还是局部的PPL功能? http://imgur.com/PFSbkJd 查了一下, PPL是Microsoft Concurrency Runtime中的其中一块 https://msdn.microsoft.com/en-us/library/ee207192.aspx 那linux下的std::async是使用什麽机制? 跟windows一样吗? 会这麽问, 是因为std开头的应该是standard library, 是否会因为os而有改变? ※ 引述《Caesar08 (Caesar)》之铭言: : 原本要回你信,後来想说直接放版上好了,以便让其他人看(也让别人纠正自己的错误) : 如果你仔细读 : http://en.cppreference.com/w/cpp/thread/async : 你就会发现如果是用launch::async, : "async executes the function f on a new thread of execution (with all thread-l : oc : 也就是说他的执行会 像 直接construct thread一样 : 问题来了,这个像真的就会如同construct thread一样吗? : 首先,需要先知道,每个CPU有最大能提供的threads数量(简称CPU threads) : 而每个作业系统也有最大能提供的threads数量(简称OS threads) : 如果在程式construct过多thread(如同你的arrayCount),有可能会导致system_error : ,? : 1. 你已经把所有OS threads都用完了 : 2. 你的OS有限制process能使用的threads数量 : 假设system_error的情况都没有,那你还会面对别的问题,context switch : 一旦你的construct threads的数量大於CPU threads,就会需要context switch : context switch会增加程式执行时间,因为 : 1. 它减少每个threads能使用的时间 : 2. context switch本身就需要时间,而它成本不低 : 讲了那麽多,那async可以做什麽? : 原因是async本身可以帮你解决掉context switch所产生的问题 : (如果你是用launch::async|launch::deferred,那还可以解决system_error的问题) : 虽然说async的行为 像 直接construct thread,但它内部如果只用固定N个threads轮流 : 执? : 那他就不需要context switch,所以async可以更快 : std::thread因为有提供native_handle,它可以做更多async做不到的事情(例如设定pri : or : (而且thread每次construct都需要system call,async可以用threadpool解决这问题) : 如果你不需要用native_handle,那你就应该使用async : 或是你可以自己写threadpool来使用(或是用intel TBB,感谢LiloHuang补充) : 但我目前没看到有好的threadpool可以满足以下四点 : 1. exception safety : 2. work stealing : 3. pure C++ : 4. thread-safe(这看起来好像很基本,但github搜索threadpool第一页的 : 第3(nbsdx)与第5(tghosgor)的threadpool都没做到) : 即便是我自己写的threadpool,目前1与2都没做到(1快做到了) : 即使都做到了,也还有dynamic resize threadpool可以研究 : 另外,关於你说的 : : 我想std::thread应该也是在new thread中执行, 但难道它是以同步的方式吗? : 所有thread应该都算是asynchronous(非同步) : 但是asynchronous本来是用来形容IO的 : 你拿asynchronous形容thread的执行方式,好像怪怪的 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.174.208.101
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1461084410.A.9E9.html
1F:→ EdisonX: std 开头的在不同 os 下的确很可能做法不同. 04/20 02:29
2F:→ Caesar08: 会 04/20 09:08
3F:推 LiloHuang: 透过 create_task 建立 task 後会用 ThreadPool 来跑 04/20 09:49
4F:→ LiloHuang: 详见 MSDN Key Points 第二点 https://goo.gl/Vu2Uht 04/20 09:49
5F:推 fatrabitree: Stl只管行为 不管实作吧 04/20 14:03
6F:→ a2975313: 请问如何查到STL对std::acyns的定义? 05/09 00:46







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP