C++并发与多线程笔记(1)

一、并发、进程、线程的概念

  1. 并发

并发:两个或者更多的任务同时发生。(同一时间间隔),一个程序同时执行多个独立的任务;

并发的假象(不是真正的并发):这种切换是要有时间开销的。
使用并发的原因:提高性能
可执行程序
windows下 .exe
linux下 ls -la rwxrwxrwx(x执行权限)
进程:程序的一次执行,(可执行程序是能够运行的),可执行程序运行起来,就叫创建一个进程。运行起来的可执行程序。

  1. 线程
    线程:每个线程(执行起来的可执行程序),都有一个主线程,也就是进程中只能有一个主线程。
    除了主线程外,我们可以通过自己写代码来创建其他线程,其他线程走的是别的道路。

每创建一个新线程,就可以在同一个时刻,多干一个不同的事(多走一条不同的代码执行路径)

线程是用来执行代码的;
把线程这个东西理解成一条代码的执行通路,一个新线程代表一条新的通路。
多线程程序可以同时干多个事,所以运行效率高
多线程:
线程开发有一定难度。
互斥,原子操作,死锁,,,

  1. 并发
    实现并发的手段:
    我们通过多个进程实现并发
    1) 多进程并发:
    word启动后是进程,浏览器启动后是进程.
    进程之间的通信(同一个电脑上:管道,文件,消息队列,共享内存);
    2)多线程并发
    单个进程中,创建了多个线程。
    线程:像是轻量级的进程,每个线程都有自己独立的运行路径,但是一个进程中的所有线程共享地址空间(共享内存);//例:全局变量,指针,引用 都可以在线程之间传递,因此,使用多线程开销远远小于多进程,
    //但共享内存会带来新问题,数据一致性问题;线程A,线程B;要有先后顺序关系,通过线程同步方法来保证数据的安全,比如采用互斥量或者读写锁。否则会发生数据竞争(多个线程同时对一个地址空间进行写操作)。

线程有以下优点:
(1)线程启动速度更快,更轻量级
(2)系统资源开销更少,执行速度更快
缺点:理解比较难
linux下:
创建线程:pthread_create()
widows下:CreateThrea()
//以往多线程代码不能跨平台
C++11新标准:增加对多线程的支持,意味着可移植性(跨平台)

猜你喜欢

转载自blog.csdn.net/shanlijia/article/details/107127346