C++并发编程:一、基本概念
2017-01-25 14:26
295 查看
并发编程基本概念
我们先使用多线程实现并发的方式写一个例子:
什么叫做并发?
其实,从计算机映射到现实生活中,我们经常会遇到一些并发的情况。比如说,我们可以边思考,边走路,比如说左手画方右手同时画圆,这都可以说是生活中人的并发能力。在计算机的范畴内,并发是指在同一时间执行多个任务,但这又不真正的是在同一时刻执行,因为现在的桌面或者笔记本类型的计算机,所支持的硬件级并发能力是有限的,就算是4核处理器,或者是多个处理器,每个处理器又有多核,也不能保证实现真正的硬件级并发,因为如果你同一时间打开的任务有可能会有很多,总有可能会超出硬件级并发的能力,当这种情况出现时,计算机还有一种能力能够实现并发,这就涉及到了任务切换,但这就不属于真正的硬件级的并发了。
如何实现并发?
两种方式:一,使用多个进程;二,在一个进程中使用多个线程;在我们上面的代码例子中使用的就是多线程的方式。
多进程实现并发:
我们可以把一个应用分为多个进程,每个进程有一个线程,各进程之间使用常见的进程间通讯方式(如:信号、socket,文件,管道)进行通信。如下图:
![](https://img-blog.csdn.net/20170127223347594?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ05fTWljaGFlbF9Zb3VuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用这种方式实现并发占用系统资源过多,因此并不推荐。
多线程实现并发:
一个线程很像一个轻量级的进程:每个线程独立于其他线程,每个线程有自己的指令序列。但是不同于多进程,一个进程中的各线程共享同一个地址空间,各个线程之间可以共享数据(如全局变量,也可以通过指针或引用在各线程之间传递数据)。使用多线程实现并发的方式的系统开销要远小于多进程的方式,因此一般推荐使用多线程实现并发。
我们先使用多线程实现并发的方式写一个例子:
#include <iostream> #include <thread> void hello() { std::cout << "Hello, World!" << std::endl; } int main() { std::thread t(hello); t.join(); return 0; }在以上代码中,使用了C++11提供的<thread>头文件,该头文件提供了线程类thread。在主线程(main函数)中,创建了一个thread对象t,该对象需要一个函数地址作为新线程的起始函数,接下来调用join()方法,在主线程中对新线程进行等待,避免主线程结束了而新线程还没有执行完的情况出现。以上是一个十分简单的用C++11标准库提供的支持所写的一个多线程的小例子,接下来,介绍一些关于并发的概念,以及实现并发的两种方式。
什么叫做并发?
其实,从计算机映射到现实生活中,我们经常会遇到一些并发的情况。比如说,我们可以边思考,边走路,比如说左手画方右手同时画圆,这都可以说是生活中人的并发能力。在计算机的范畴内,并发是指在同一时间执行多个任务,但这又不真正的是在同一时刻执行,因为现在的桌面或者笔记本类型的计算机,所支持的硬件级并发能力是有限的,就算是4核处理器,或者是多个处理器,每个处理器又有多核,也不能保证实现真正的硬件级并发,因为如果你同一时间打开的任务有可能会有很多,总有可能会超出硬件级并发的能力,当这种情况出现时,计算机还有一种能力能够实现并发,这就涉及到了任务切换,但这就不属于真正的硬件级的并发了。
如何实现并发?
两种方式:一,使用多个进程;二,在一个进程中使用多个线程;在我们上面的代码例子中使用的就是多线程的方式。
多进程实现并发:
我们可以把一个应用分为多个进程,每个进程有一个线程,各进程之间使用常见的进程间通讯方式(如:信号、socket,文件,管道)进行通信。如下图:
使用这种方式实现并发占用系统资源过多,因此并不推荐。
多线程实现并发:
一个线程很像一个轻量级的进程:每个线程独立于其他线程,每个线程有自己的指令序列。但是不同于多进程,一个进程中的各线程共享同一个地址空间,各个线程之间可以共享数据(如全局变量,也可以通过指针或引用在各线程之间传递数据)。使用多线程实现并发的方式的系统开销要远小于多进程的方式,因此一般推荐使用多线程实现并发。
相关文章推荐
- 【3】Java并发编程:多线程基本概念
- Java多线程学习-并发编程实践基本概念总结整理
- 【java并发编程实战】—–线程基本概念
- 01.JAVA并发编程-线程的使用-基本概念
- 【Java并发编程实战】-----线程基本概念
- 【java并发编程实战】-----线程基本概念
- C++ 并发编程之std::thread的基本用法
- Java并发编程札记-(一)基础-01基本概念
- [C++/CLI编程宝典][7]基本概念
- 【Java并发编程实战】-----线程基本概念
- Java并发编程 - 基本概念
- Java并发编程 - 基本概念
- 并发编程的几个基本概念
- 【java并发编程实战】—–线程基本概念
- 并发编程的基本概念
- 【Java并发编程实战】-----线程基本概念
- 【java并发编程实战】-----线程基本概念
- [C++/CLI编程宝典][7]基本概念
- 【Java并发编程】基本概念
- AOP 面向方面编程的介绍----基本概念(3)