一、多进程和多线程对比

多进程:进程不止一个,开销比较大,通信方式比较复杂(可以用过管道、文件、消息队列进行通信),维护成本不高。

多线程:利用共享内存的方式进行指令的执行,开销比较低,但是维护起来比较麻烦,需要考虑到共享资源的问题。不支持分布式运算。

二、多线程举例

#include "iostream.h"
#include "thread.h"
using namespace std; void function()
{
cout<<"hello world"<<end;
} int main()
{
std::thread t(function); //t()内为要在此线程执行的方法
t.join(); //t加入主线程,主线程等待他执行完毕再执行
//t.detach(); //并发执行,和主线程同时执行,可能导致主线程执行完毕它 // 没有机会执行,并且被detach的不能在join,除非加判断入下 /* if(t.joinable())
{
t.join();
}*/ return null;
}

三、多线程管理

1、

void function()
{
for(int i=,i<;i++)
{
cout<<"form t,i love u";
}
} int main()
{
thread t((function()));//线程执行的另一种方式
try
{
for(int i=,i<;i++)
{
cout<<"form main,i love u";
}
}
catch(...)
{
t.join();
throw; //保证t和main有一个执行
} }

2、线程只能被move而不能被复制,线程可以执行一切可以被调用的结构(包括类等)

calss factor
{
void function(string str)
{ cout<<"hello"+str<<endl;
}
} void main() {
string s="u";
thread t((function()),s); } 如果是通过引用传递参数;
calss factor
{
void function(string& str)
{ cout<<"hello"+str<<endl;
}
}
相应的调用部分应该是:
thread t((function()),std::ref(s));
如果调用的时候是:
thread t((function()),s);
尽管被调用的方法是引用传递值的,但是并不会影响值传递之实;
引用就是别名的概念,可以减少不必要的复制; 引用还可以写成
thread t((function()),move(s));
但是线程只能写成move
如:
thread t2=move(t);

3、每个线程具有唯一的线程Id,可以用get_id()获取;

4、每个任务可以用多少个线程高效完成操作,和cpu的核心数有关,过多反而会导致效率低;

thread::hardware_concurrency() 查看最多多少比较合适

c++的多线程和多进程的更多相关文章

  1. 深入解析PHP中的(伪)多线程与多进程

    本篇文章是对PHP中的(伪)多线程与多进程进行了详细的分析介绍,需要的朋友参考下 (伪)多线程:借助外力利用WEB服务器本身的多线程来处理,从WEB服务器多次调用我们需要实现多线程的程序.QUOTE: ...

  2. python多线程和多进程对比

    1.多线程:开启一个进程test.py ,占用两个cpu  共占用45%左右(top -c ,按1)  多进程:开启两个进程test.py 用两个cpu  90%*2左右 test.py # codi ...

  3. python 多线程和多进程基本写法

    #coding=utf-8 def aJob(arg): """ 提供给多线程调用 """ import threading t = thr ...

  4. 多线程 or 多进程?[转]

    在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术的选型上,比如WEB服务器技术中,Apache是 采用多进程的(perfork模式,每客户连接对应一个进 ...

  5. 多线程、多进程、协程、缓存(memcache、redis)

    本节内容: 线程: a:基本的使用: 创建线程: 1:方法 import threading def f1(x): print(x) if __name__=='__main__': t=thread ...

  6. 多线程 or 多进程 (转强力推荐)

    在Unix上编程采用多线程还是多进程的争执由来已久,这种争执最常见到在C/S通讯中服务端并发技术 的选型上,比如WEB服务器技术中,Apache是采用多进程的(perfork模式,每客户连接对应一个进 ...

  7. tcp 多线程与多进程调用close

    http://blog.csdn.net/russell_tao/article/details/13092727 大家知道,所谓线程其实就是“轻量级”的进程.创建进程只能是一个进程(父进程)创建另一 ...

  8. Python串行运算、并行运算、多线程、多进程对比实验

    转自:http://www.redicecn.com/html/Python/20111223/355.html Python发挥不了多核处理器的性能(据说是受限于GIL,被锁住只能用一个CPU核心, ...

  9. python 多线程、多进程

    一.首先说下多线程.多进程用途及异同点,另外还涉及到队列的,memcache.redis的操作等: 1.在python中,如果一个程序是IO密集的操作,使用多线程:运算密集的操作使用多进程. 但是,其 ...

随机推荐

  1. input range样式更改,模拟滑块

    input range 样式更改,js模拟滑块实时更新数据. 效果图: html 代码: <div> <span class="slider"></s ...

  2. struts2所有组件

    struts2所有组件(动作,结果,拦截器) 动作在框架中可作为MVC模式的模型.这个角色的主要职责是控制业务逻辑,动作使用execute()方法来实现这个功能. 这个方法中的代码应该只关注与请求相关 ...

  3. 图解GCD

    线程.任务和队列的概念 异步.同步 & 并行.串行的特点 一条重要的准则 一般来说,我们使用GCD的最大目的是在新的线程中同时执行多个任务,这意味着我们需要两项条件: 能开启新的线程 任务可以 ...

  4. Url获取图片流并打包~

    因为公司项目需求,做一个所有数据以excle的格式汇出,其中包括了图片. 而数据库保存的是图片的url,虽然不知道为什么....如果数据量大的话, 那么所有数据汇出,包括图片的话... 额.. 不知道 ...

  5. Altium Designer 常用的快捷键

    ctrl+r                      复制并重复黏贴 ctrl+shift+v             只能黏贴 shift+c                    取消选择 sp ...

  6. postgresql修炼之道学习笔记(2)

    随后的章节  介绍了基础的sql,这个我略过了,我喜欢在开发的时候,慢慢的研究,毕竟有oracle的基础. 现在,学习psql工具 使用create database创建数据库的时候,出现如下问题: ...

  7. call经常用到的地方

    看完这几个下例子,会对学习js有所帮助1.小猫和小狗 function food(){} food.prototype={ food:'fish', say:function(){ console.l ...

  8. C#,C++修改vs文件模板,添加自定义代码版权版本信息

    简单型的修改类似该路径下的模板文件即可(vs版本或安装路径不同路径可能不同) C#: 模板参数参考https://msdn.microsoft.com/zh-cn/library/eehb4faa.a ...

  9. Java程序猿学习的建议(转)

    第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...

  10. 使用sklearn优雅地进行数据挖掘【转】

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...