并发、进程和线程的概念和实现方法(理论)

本文深入讲解并发编程的基础概念,包括并发、可执行程序、进程和线程的定义及其区别,探讨了多进程与多线程的优缺点,以及在不同场景下的应用。介绍了操作系统如何通过调度实现并发的假象,并讨论了多核CPU环境下真正的硬件并发。同时,文章还涵盖了进程间通信的方法,如管道、文件、消息队列和共享内存,以及多线程编程中常见的数据一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

并发 进程和线程的基本概念

    1. 并发:
      两个或者多个任务(独立任务)同时发生(进行);一个程序同时执行多个任务;

      在以往计算机中,单核CPU(中央处理器):在某个时刻只能同时执行一个任务,由操作系统进行调度,进行所谓的‘任务切换’,这是一种并发的假象(不是真正的并发),执行切换(上下文切换),是需要有时间开销的,比如操作系统要保存你恢复时的各种状态、执行进度等,都需要时间开销。多核CPU,能够实现真正的并发(硬件并发)

      并发的目的:同时可以进行多个任务,提高性能。
  • 2.可执行程序

    磁盘上的文件, windows上文件名为.exe文件,可执行程序是可以运行的, linux系统下下,ls -la rwx(x执行权限)
  • 3.进程

    简单来说,就是可执行文件运行起来,就叫做创建了一个进程,或者说进程就是运行起来的可执行程序。
  • 4.线程

    每个进程(运行起来的可执行程序),都有一个主线程,主线程是唯一的,也就是进程中只有一个主线程;

    当执行可执行程序后,产生一个进程后,主线程就随着进程默默启动了;

    VS中,如果ctrl+F5运行一个程序的时候,其实就是进程的主线程来执行(调用)main函数的代码。

    进程和主线程生命周期一样的。

    线程:用来执行代码的,可以理解成执行代码的一条通路。

    除了主线程之外,我们还可以创建其他线程,但是走的不同通路。

    每创建一个线程,就可以做执行一条代码路径,多线程。但是线程并不是越多越好,每个线程都有独立的堆栈空间,线程之间切换会有时间和内存消耗的。

    多线程进程程序可以同时执行多个任务,所以运行效率高。

并发的实现方法

  • 多进程实现并发。
    例如,启动一个浏览器是一个进程,在启动一个VS就是另外一个进程。
    账号服务器,游戏逻辑服务器。服务器进程之间的通信。
    进程间通信:(同一电脑上)管道、文件、消息队列、共享内存;
    (不同电脑上)socket通信技术。
  • 多线程实现并发,即在单个进程中,实现除了主线程之外的其他线程。
    线程:轻量级的进程,每个线程有自己独立的代码路径,但是同一进程中的多个线程共享地址空间(共享内存),全局变量、指针、引用等都可以在线程之间共享,因此多线程开销远小于多进程。
    共享内存代码的问题:数据一致性问题。
  • 多进程和多线程技术可以混合使用,但是优先考虑多线程技术。
线程和进程对比
  • 优点
    线程启动速度更快,更轻量级
    系统开销资源更少,执行速度更快,例如共享内存这种通讯技术比其他通讯速度都快。
    *缺点
    使用有一定难度,注意处理数据一致性问题。

C++11新标准线程库

windows:CreateTheard(), _beginthread(), _beginthreadexe()创建线程

linux:pthread_create()创建线程

POSIX: thread(pthread)跨平台库

  • C++11新标准,C++本身对多线程支持,意味着可移植性,跨平台
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值