进程
进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程
线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。

 线程和进程各自有什么区别和优劣呢?
进程是资源分配的最小单位,线程是程序执行的最小单位。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

进程间通信的方式——信号、管道、消息队列、共享内存
1. 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2. 命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
4. 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5. 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
6. 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
7. 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
8. 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

转载于:https://www.cnblogs.com/Mao-admin/p/9987335.html

1.0-并发编程-进程和线程简介相关推荐

  1. 学习笔记(33):Python网络编程并发编程-进程池线程池

    立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...

  2. Python 并发编程--进程,线程,协程

    并发编程 基本概念的区分: 并发 只有一个CPU,多个程序在一个CPU上轮流执行,宏观上多个进程并发执行,但微观上依旧是串行 并行 有多个CPU,多个程序在多个CPU上同时执行. 进程 计算机中最小的 ...

  3. 并发编程(进程与线程)

    一.前言 进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕 ...

  4. python并发编程-进程池线程池-协程-I/O模型-04

    目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...

  5. python并发编程--进程、线程、协程、锁、池、队列

    文章目录 操作系统的概念 进程 multiprocessing模块 守护进程 使用多进程实现一个并发的socket的server 锁 生产者消费者模型 数据共享 线程threading模块 守护线程和 ...

  6. 学习笔记(24):Python网络编程并发编程-进程与线程的区别

    立即学习:https://edu.csdn.net/course/play/24458/296438?utm_source=blogtoedu 线程与进程的区别: 1.消耗区别:进程>线程 1) ...

  7. java并发编程实践(2)线程安全性

    [0]README 0.0)本文部分文字描述转自:"java并发编程实战", 旨在学习"java并发编程实践(2)线程安全性" 的相关知识: 0.1)几个术语( ...

  8. Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯...

    本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...

  9. 并发和多线程(一)并发、进程、线程概念

    一.并发.进程.线程的基本概念和综述 1.1 并发 两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务: 以往计算机,单核cpu(中央处理器):某一个时刻只能执行一个任务 ...

  10. python多线程执行其他模块的文件_python并发编程--进程线程--其他模块-从菜鸟到老鸟(三)...

    concurrent模块 1.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Proc ...

最新文章

  1. 给妹子讲python-S01E18初探函数作用域
  2. [转]numpy性能优化
  3. 后缀数组--(最长公共前缀)
  4. 0909 粗浅的认识编译原理
  5. java做爬虫和python做爬虫_为什么常用Python,Java做爬虫,而不是C#C++等?
  6. 哈工大-基于内核栈切换的进程切换
  7. 使用其它模块的头文件
  8. C语言实现简单小游戏
  9. html 免费设计,十款最佳免费Web设计软件一览
  10. android swf模拟器,在Android模拟器上加载swf文件
  11. 搜狗输入法的桌面图标消失,无法打开设置怎么办
  12. 「JCVI教程」使用JCVI进行基因组共线性分析(上)
  13. django-数据库[ 配置 ]
  14. 树莓派服务器U盘文件权限,抛弃SD卡,树莓派4的USB启动官方教程来了
  15. 关系代数笛卡尔积和自然连接的例子
  16. 阿里云服务器遇到的问题
  17. 【Unity】Obi插件系列(五)—— 约束
  18. 2007.5 同航驾驶培训公司网站
  19. 计算机网络实验以太网帧分析,实验二 用Ethereal捕获并分析以太网帧格式
  20. 祝你一路顺风_吴奇隆_酷音小伟编曲_C调简单版

热门文章

  1. Windows监控日志文件 Tail for Win32
  2. 软件安装-Mysql数据库
  3. 第一节:Create React App
  4. 2.Entity Framework Core 5.0 创建数据库(code frist)和迁移
  5. 微信小程序获取地理位置源码
  6. java textview多行_如何在java android中将ellipsize设置为textview的两行或多行
  7. 六石管理学: 头目们是如何忽略产品质量的
  8. JAVA如何动态加载jar,并调用对应的函数?
  9. 以软件工作为例,传统武术如何实战
  10. 全网首发:JProfiler11运行时找不到库的解决办法