本系列文章主要为学习多线程基础编程期间的笔记, 主要学习"C++11并发与多线程"视频课程(B站), 并查看各种资料作为补充.
一、 并发、进程、线程- 并行和并发:
- 并发(concurrency):实际上一个时刻只能处理一个任务,任务调度、上下文快速切换,使得看上去多个进程同时都在运行的现象
- 并行(parallel):多个CPU,每个cpu可以处理一个任务,在某一时刻,多个任务同时被执行
- 并行与否程序员无法控制,只能让 *** 作系统决定。
- 当程序中写下多进程或多线程代码时,这意味着的是并发而不是并行
- 可执行程序:
- windows 扩展名为exe
- linux:ls -la, rwxrwxrwx(x执行权限)——通过“./文件名”
- 进程
- 一个可执行程序运行起来,就叫创建了一个进程
- 一个程序执行在不同的数据集上就成为不同的进程
- 进程 = PCB + 程序 + 数据集合
[任务管理器图1-进程]
如图所示,每一个都是一个进程,同一个exe文件可以打开为多个进程
[任务管理器图2-当前系统进程和线程]
进程状态模型,可以忽略挂起(suspend)就是经典的五状态模型。
4.线程
- 每个进程有且只有一个主线程,可以写代码走其他线程(建议不要超过200-300个);
- 启动程序产生进程之后,这个主线程就自动启动起来了
- ctrl+f5运行程序时,实际上是进程的主线程来调用main()的代码,可以理解为代码执行的一条道路;自己写的其他线程,可以走不同的地方;
- 线程之间的切换有很多中间状态,切换会耗费本该属于程序运行的时间;
- 多线程并不是说线程越多效率越高,要在实践之中进行调整;
- 网络通讯、网络服务器、网络方向,多线程是必备基础。
- 实现并发的手段
- 通过多个进程
- 单个进程中,多个线程
- 多进程并发:
- 服务器进程之间的通信
- 进程之间通信(同一个电脑上:管道、文件、消息队列、共享内存;不同电脑上:socket通信);
- 多线程并发:
- 一个进程中的所有线程有线程共享地址空间(共享内存)
- 全局变量、指针、隐痛都可以在线程之间传递,所以使用多线程开销远远小于多进程
- 出现相应问题:数据一致性
- 优先考虑多线程而不是多进程;
- 之前需要用windows.h的create thread ...... / linux pthread_creat() ...... 来实现
- C++语言本省增加对多线程的支持,意味着可移植性(跨平台)
我已经理解了并发和并行的区别 - 骏马金龙 - 博客园
并发和并行的区别 - 简书
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)