C++并发与多线程(1) |
您所在的位置:网站首页 › 多线程和并发编程一样吗 › C++并发与多线程(1) |
转载自:C++并发与多线程(1) | 并发、进程和线程的基本概念 在未来工作中,如果你需要进行大型的软件开发,就可能有许多的任务需要处理,如果将所有的任务都以串行的方式执行,则整个系统的效率将会非常低下,应用程序的用户体验会非常的差。 一、进程进程(英语:process),是指计算机中已运行的程序。进程是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体; 通俗地说,进程——就是一个可执行程序运行起来了,就叫创建了一个进程。 一、线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 线程的一些性质: (1)每个进程都有一个主线程,这个主线程是唯一的,也就是一个进程中只能有一个主线程。 (2)当你执行一个可执行程序,产生了一个进程后,这个主线程就随着这个进程默默的启动起来了。 (3)运行这个程序时,实际上是进程中的主线程来执行(调用)这个main函数中的代码; (4)主线程与进程共存。 三、并发两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务;以往计算机,单核CPU(中央处理器):某一个时刻只能执行一个任务:由操作系统调度,每秒钟进行多次所谓的“任务切换”——并发的“假象”(不是真正的并发);这种切换(上下文切换)是要有时间开销的,比如操作系统要保存你切换时的各种状态、执行进度等问题,都需要时间,之后切换回来的时候要复原这些信息。 多线程就是一种并发。但是线程并不是越多越好,每个线程,都需要一个独立的堆栈空间(1M),线程之间的切换要保存很多中间状态;切换会耗费本该属于程序运行的时间。 四、线程的总结(1)线程是用来执行代码的; (2)把线程理解成一条代码的执行通路,一个新线程代表一条新的通路。 (3)一个进程自动包含一个主线程,主线程随着进程默默地启动并运行,我们可以通过编码来创建多个其他线程(非主线程);但是创建的数量最大都不建议超过200-300个,至于到底多少个合适,大家在实际的项目中可以不断调整和优化,有时线程太多的时候效率反而会降低。 (4)因为主线程是自动启动的,所以一个进程中最少也是有一个线程(主线程)。 (5)多线程程序可以同时做多个事,所以运行效率高。但是多高,并不是一个很容易评估和量化的东西。 五、并发的实现方法 5.1 实现并发的手段(1)通过多个进程实现并发。 (2)在单独的进程中,创建多个线程来实现并发——自己写代码来创建除了主线程之外的其他线程。 5.2 多进程并发进程之间通信:(同一个电脑上:管道,文件,消息队列(C++使用消息队列实现进程间通信),共享内存); (不同电脑上:socket通信技术) 5.3 多线程并发每个线程都有自己独立的运行路径,但是一个进程中的所有线程共享地址空间(共享内存)——全局变量、指针、引用都可以在线程之间传递,所以使用多线程开销远远小于多进程。 共享内存带来新问题,数据一致性问题:线程A,线程B,线程A操作B线程的数据,B也操作A的,那么会怎么样?——临界?互斥? 进程并发和多线程并发虽然可以混合使用,但是建议,优先考虑多线程技术。 5.4 两种并发方式对比与进程相比,线程有如下优点: (1)线程启动速度更快,更轻量级; (2)系统资源开销更少,执行速度更快,比如共享内存这种通信方式比任何其他的通信方式都快; 缺点:(1)使用时有一定难度,要小心处理数据的共享问题。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |