进程、线程、并发和并行概念

一、进程和线程

进程是一个运行起来的可执行程序。进程有三种状态:

  • 就绪 进程获得了除了CPU外所有必要资源
  • 运行 进程获得了所有资源,开始执行
  • 阻塞 进程正在尚未满足要求,正在等待

线程是程序执行流的最小单位(要执行,最起码是一个线程)

二、线程和进程的联系和线程一些常识

2.1 线程和进程之间的联系
  • 进程必有唯一的主线程
  • 进程和主线程同时创建同时结束
  • 线程切换要比进程切换要快
2.2 线程的几点常识
  • 线程不是越多越好(200-300最佳)
  • 线程需要独立的堆栈空间,但没有自己独立地址
  • 线程切换比进程切换要快

线程需要独立的堆栈空间用于切换时的中间状态。进程的资源特点是共享的,而进程则是独立。

具体地,线程拥有以下资源[1]:

  • 栈空间(也就是自己的局部变量)
  • 全局变量(包括静态)
  • 文件描述符
  • 信号处理函数
  • 当前目录状态

相对于进程而言,进程拥有独立的变量空间和PID,如果需要交换变量,需要采用IPC技术。

三、并发和并行

3.1 并发

并发是多个执行主体需要去做一件事情,但是资源只有一个。它需要解决的问题是竞争和同步的问题。

3.2 并行

并行是多个执行主体需要去做一件事情,每个执行主体各自拥有自己的资源。它们之间互不干扰。

四、并发的实现方法
4.1 多个进程实现并发

对于同一个电脑,可以通过管道、文件、消息队列和共享内存实现。对于不同电脑:用socket通信技术实现

4.2 多个线程实现并发

线程之间共享数据,通信简单,系统开销小。但是它带了数据需要同步的问题。

五、C++11线程库实现并发

不同系统的线程创建都不一样,跨平台不方便,虽然有POSIX thread(pthread),但是还是需要配置。C++11标准解决了这个问题。

[1] 马修, N. ), 斯通斯,等. Linux程序设计: 第4版[M]. 人民邮电出版社, 2010.

20201031 对线程具体共享的资源进行了说明。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值