在Windows上创建缓慢的线程
我已经使用C 11工具将一个数字运算应用程序升级为多线程程序.它在Mac OS X上运行良好,但不受益于
Windows上的多线程(Visual Studio 2013).使用以下玩具程序
#include <iostream> #include <thread> void t1(int& k) { k += 1; }; void t2(int& k) { k += 1; }; int main(int argc,const char *argv[]) { int a{ 0 }; int b{ 0 }; auto start_time = std::chrono::high_resolution_clock::now(); for (int i = 0; i < 10000; ++i) { std::thread thread1{ t1,std::ref(a) }; std::thread thread2{ t2,std::ref(b) }; thread1.join(); thread2.join(); } auto end_time = std::chrono::high_resolution_clock::now(); auto time_stack = std::chrono::duration_cast<std::chrono::microseconds>( end_time - start_time).count(); std::cout << "Time: " << time_stack / 10000.0 << " micro seconds" << std::endl; std::cout << a << " " << b << std::endl; return 0; } 我发现在Mac OS X上启动一个线程需要34微秒,在Windows上需要340微秒才能完成相同的操作.我在Windows方面做错了吗?这是一个编译问题吗? 解决方法
不是编译器问题(严格来说也不是操作系统问题).
众所周知,创建线程是一项昂贵的操作.在Windows下尤其如此(在克隆之前的Linux下也是如此). 然而,无论如何,产卵线程是否缓慢并不重要. 在真实程序中创建20,000个基准测试中的线程是一个严重的错误.虽然创建数千(甚至数百万)个线程并非严格违法或不允许,但使用线程的“正确”方法是创建的线程数量不会超过大约CPU核心数量.一个人不会一直创建非常短暂的线程. 现在,假设您在程序启动时创建了10个线程,根本不需要花费3毫秒.无论如何,程序启动需要几百毫秒(至少),没有人会注意到差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- csv – 07002 [Microsoft] [ODBC SQL Server驱动程序] COUN
- .net – Task <>和IAsyncOperation <>
- Windows服务是如何在三台机器上链接的
- active-directory – 内置的“提供远程协助”因权限无法正常
- 如何将CLI应用程序作为Windows服务运行?
- windows – Git子模块乱七八糟:如何与不熟悉git的开发人员
- Microsoft Word中格式化的PHP代码
- WindowsPE权威指南-PE文件头中的重定位表
- windows-8 – 是否有免费的方式来分发免费的Windows 8应用程
- windows – 如何评估环境变量?