记录一下学习C++并发、线程、进程过程,
并发VS并行
并发:有两个或两个以上的任务(独立的活动),同时发生(进行),
或者说**一个程序同时执行多个独立任务**。
并行:顾名思义,同一时刻,可以同时处理多个操作,强调的是开始时间。
之前的计算机是单核CPU,同一时刻只能实现一个任务:由操作系统调度,每秒钟进行多次所i为的“任务切换”(第一个任务10ms、快速切换到下一任务10ms.只要我速度够快,看起来就像几个任务同时进行了)。但是这只是一种假象的并发,并不是真正的并发。这种切换也叫做上下文切换,是有时间开销的。比如,操作系统要保存你切换时候的各种状态,执行进度等信息。都需要时间,一会切换回来的时候要 复原这些信息。
但是,随着科技的进步,硬件的发展,出现了多处理器的计算机:用于服务器和高性能的计算领域。
现在在一块芯片上有多个(多核)CPU:双核、4核、8核、10核、、、、、能够实现真正的并行,执行多个任务(硬件并发)
打开任务管理器瞅瞅:
举个例子:每个任务都有被CPU执行的机会。
当cpu的数量少于任务数的时候,其实只是通过轮流调度来实现一种表面的并发进行。
为什么要使用并发:可以同时执行多个任务,有提高性能的作用
可执行程序
磁盘上的一个文件,Windows下的扩展名为.exe文件。Linux下 ls -la ,rwx文件
进程
就是上面说的,一个可执行程序运行起来了,我们就叫创建了一个进程;
具体的进程情况,我们可以在电脑的任务管理器上看出来
线程
1、每个进程(执行起来的可执行程序)都有一个主线程,这个主线程是唯一的。即:一个进程中只能有一个主线程。
2、当你执行一个可执行程序,产生一个进程后,这个主线程就随着这个进程默默的启动起来了,在我们执行程序的时候,实际上是进程的主线程来执行(调用)这个main函数中的代码。同时,主线程和进程的寿命一样的。
线程:可以理解为代码的执行通路,我们可以写代码来创建其它线程,就可以实现,在同一个时间,在同一个进程执行多个任务,每创建一个新的线程,就可以在同一时刻,多做一件不同的事情。
多线程(并发):线程并不是越多越好。因为每个线程都需要一个独立的内存空间(堆栈)也要考虑电脑的实际情况,除此之外,线程之间的切换也要保存许多中间的状态,切换会耗费本来属于程序运行的时间。
线程总结:
1、线程是用来执行代码的;
2、将线程理解为代码的执行通路,一个新线程代表一条新通路;
3、一个进程自动包含一个主线程,主线程随着进程默默的启动并且运行着,我们也可以通过编码来创建多个线程(非主线程),到是创建的数量不建议超过(200-300),实际情况根据项目需求不断调节和优化。
4、因为主线程是自动启动的,所以一个进程中至少也有一个线程(主线程)–(进程和线程类似父子关系)
5、多线程程序可以做多件事,所以运行效率很高,但是具体的很难评估和量化。实际情况根据项目需求不断调节和优化。
告诫自己::
C++线程涉及很多概念,对于C++学习的道路上非常关键,不要急于求成