进程、线程简介

以下内容源于网络资源的学习整理,如有侵权,请告知删除。

参考博客

http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html(通俗理解)

https://blog.csdn.net/chen_geng/article/details/51613445(表格总结,推荐)

https://blog.csdn.net/java_zero2one/article/details/51477791(并发和并行)

https://www.cnblogs.com/reality-soul/p/6397021.html(单进程和多进程的代码示例)

https://blog.csdn.net/zqixiao_09/article/details/50298693

https://blog.csdn.net/linux0231/article/details/24523129

https://blog.csdn.net/earbao/article/details/53106419

之前关于进程的学习要点总结:https://pan.baidu.com/s/1dktsSp2D8YIinhD2DUdUYQ

 

 

一、并发、并行

(1)并发:是指一个处理器同时处理多个任务,是逻辑上的同时发生(即假象)。

  • 程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。

(2)并行:是指多个处理器(或者多核处理器)同时处理多个不同的任务,是物理上的同时发生。

(3)比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。

(4)

当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态。这种方式我们称之为并发(Concurrent)。

当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

 

二、对比进程与线程

 进程,process线程,thread
定义资源(CPU时间、内存等)分配的最小单位程序执行的最小调度单位
区别

1、独立的地址空间。每创建一个进程,就会给该进程分配一个4G的虚拟内存空间。

2、进程是建立在虚拟内存的基础之上的。

1、没有独立的地址空间(同一进程内的线程共享进程的地址空间)。

2、主要是为了将进程的资源申请和调度属性分开。

联系

1、一个进程有几个线程组成。

2、同一个进程中的多个线程之间可以并发执行。

3、一个线程死掉就等于整个进程死掉。

4、线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

OS而言

1、uCOS只有线程的概念。uCOS的整个程序可以理解为一个进程,而其中的任务(一个个函数)就可以理解为一个个线程,有自己的堆栈和局部变量,但没有单独的地址空间。

2、对于windows,linux等,其有进程和线程。

线程的优势

一、优势

1、与进程相比,它是一种非常"节俭"的多任务操作方式。

(1)对进程而言,创建一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。

(2)对一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。

 

2、与进程相比,线程间的通信机制更方便。

(1)对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。

(2)对一个进程中的多个线程,由于它们共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。

 

3、提高应用程序响应。

  • 使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程。

4、使多CPU系统更加有效。

  • 操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU。

5、改善程序结构。

  • 一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

二、线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理 机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。

区分进程、用户线程、内核线程

uCOS/Linux状态区别

线程只有 3 个基本状态:就绪,执行,阻塞。

线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。

 

进程至少有 5 种基本状态:

初始态,执行态,等待状态,就绪状态,终止状态。

 

三、进程、线程的补充说明

(1)线程理解

线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的——无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,是 CPU 调度的一个基本单位。

(2)线程和进程大致的区别

进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。这是进程宏观上的执行过程。

进程又可有单线程进程与多线程进程两种。单线程进程的执行过程在宏观上是线性的,微观上也只有单一的执行过程;而多线程进程在宏观上的执行过程同样为线性的,但微观上却可以有多个执行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。除CPU 之外,计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。

我们知道,进程有一个进程控制块 PCB、相关程序段、(该程序段对其进行操作的)数据结构集。与进程控制表和 PCB 相似,每个线程也有自己的线程控制表 TCB ,而这个TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。

进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源

线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理 机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统 或分布式系统。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 

 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

(3)摘取自http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html的评论区

 

四、多进程的代码示例

#include <unistd.h>  
#include <sys/types.h>   
#include <stdio.h>  void print_exit()  
{  printf("the exit pid:%d/n",getpid() );  
}  main ()   
{   pid_t pid;   atexit( print_exit );      //注册该进程退出时的回调函数  pid=fork();   if (pid < 0)   printf("error in fork!");   else if (pid == 0)   printf("i am the child process, my process id is %d/n",getpid());   else   {  printf("i am the parent process, my process id is %d/n",getpid());   sleep(2);  wait();  }  
}

运行结果:

i am the child process, my process id is 15806
the exit pid:15806
i am the parent process, my process id is 15805
the exit pid:15805

说明:

(1)fork函数,功能是产生子进程。fork失败返回-1,成功返回0。

fork产生子进程的体现,就是它会返回2次:

一次返回0,顺序执行下面的代码。这是子进程。

一次返回子进程的pid,也顺序执行下面的代码,这是父进程。

(2)wait表明父进程等待子进程的终结后,处理其task_struct结构,否则会产生僵尸进程。

(3)atexit( print_exit ); 需要的参数是函数的调用地址。

 

五、多线程的代码示例

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用keil建立标准STM32工程模版(图文详细版!)

1. 模板工程的创建(超级详细版&#xff0c;使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学&#xff0c;让开发更容易更方便&#xff0c;希望大家养成良好的习惯&#xff0c;使用具有合理结构的工程目录&#xff0c;当你着手于较大的软件项目时&a…

android模拟机新闻APP,DavidTGNewsProject

DavidTGNewsProject##【Android】最新主流新闻app功能实现。仿网易,搜狐等新闻客户端(原创作品&#xff0c;转载请说明出处)先给大家看一下效果图&#xff1a;这个项目总体来说虽然不是特别难&#xff0c;但是确实非常常用的功能。是业余时间自己写的一个小项目。以前我们写的时…

轻操作动作休闲单机游戏《狂斩三国2》评测

游戏类别&#xff1a;动作休闲单机游戏时隔一年&#xff0c;曾在国内和台湾手游市 场获得top1佳绩的《狂斩三国》再度归来&#xff01;其策略加动作的独特玩法在当时颠覆了玩家们对三国游戏的阵营认知。比传统策略更简单明快&#xff0c;比传统动作无脑砍更 具思考乐趣&#xf…

物联网简介

以下内容源于朱有鹏老师课程的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 本文档提供下载&#xff1a;提取码1111——物联网简介 1、什么是物联网 1.1.物联网的概念和发展历程 1.1.1、认识物联网 &#xff08;1&#xff09;百度百科中物联网定义 &#xff08;…

Mysql语句与应用

2019独角兽企业重金招聘Python工程师标准>>> 1。正则表达式 搜索多个关键词&#xff0c;“或”, 等同 %上海% | %内蒙古% SELECT * FROM analysis_result WHERE result REGEXP 上海|内蒙古 LIMIT 1; "且" SELECT * FROM analysis_result WHERE id 1 AND …

android gb2312 utf-8,不同编码页面之间用form传值出现乱码问题解决方案 utf-8 到 gb2312...

相信有人也曾遇到过这种问题&#xff0c;今天将这个问题稍作整理发布出来。由于编码的问题传值出现乱码&#xff0c;一看到这样的情况&#xff0c;我们首先想到的是线面的两种解决办法&#xff1a;方案一&#xff1a;在接收参数页面进行转码 (这是较为理想的解决办法)方案二&a…

颜色的数字化描述(RGB与YUV的简介)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;YUV和RGB的相互转换实验_Geek.Fan的博客-CSDN博客 &#xff08;2&#xff09; 工作中用到的一些基础知识 &#xff08;3&#xff09;YUV422 YUV420 Planar \ Se…

softlayer virtual machine vhd磁盘镜像导入shell脚本

softlayer virtual machine vhd磁盘镜像导入shell脚本 脚本 测试上传; 20480 records in20480 records out2147483648 bytes (2.1 GB) copied, 44.2262 s, 48.6 MB/scurl: option --data-binary: out of memorycurl: try curl --help or curl --manual for more information 28…

第二季1:MPP模块概述

以下内容源于海思官方文档内容&#xff0c;如有侵权请告知删除。 一、MPP模块概述 海思的媒体处理软件平台&#xff08;MPP&#xff0c;Media Process Platform&#xff09;有利于应用软件的快速开发。因为该平台屏蔽了一些与芯片相关的复杂的底层处理&#xff0c;给应用软件提…

小米平板安装鸿蒙系统,【新机】安卓最强平板?MatePad Pro2曝光:预装鸿蒙OS | 小米平板5到底啥时候发布?...

目前安卓阵营还在好好做平板的可能也就是三星和华为了&#xff0c;至少整体的配置规格都还不错。根据爆料&#xff0c;华为将会在近期推出MatePad Pro 2代产品&#xff0c;预计6月份正式和大家见面。MatePadPro2将会搭载麒麟9000处理器&#xff0c;算是目前安卓平板里性能最强的…

第二季3:sample_venc.c的整体分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、sample文件夹的介绍 将mpp/sample文件夹以及mpp/include文件夹导入SI后&#xff0c;搜索main时可以发现很多main函数。这说明sample文件夹下有很多例程&#xff0c;每个例程面向一个典型应用。…

poj 2891 Strange Way to Express Integers

题目&#xff1a;http://poj.org/problem?id2891 思路&#xff1a;扩展欧几里得 #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; #define maxn 100010 int n; long lo…

读书笔记2014第13本:《富爸爸,穷爸爸》

早就收藏了《富爸爸&#xff0c;穷爸爸》这本书&#xff0c;一直没看&#xff0c;最近仔细翻看一遍&#xff0c;发现自己智商一般&#xff0c;情商不行&#xff0c;原来财商更差&#xff0c;连书里的穷爸爸也比不上。这本书在这个时代再看&#xff0c;已经跟不上形势的发展了&a…

第三季1:ORTP库的移植与视频的实时传输实验

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 本节内容是移植ORTP库&#xff0c;并使用ORTP库来完成视频的实时传输。 一、ORTP的简介 1、视频网络传输的两种方式 &#xff08;1&#xff09;基于下载的方式。比如http&#xff08;Hyper Text T…

有赞下拉菜单html,有赞vant-ui Tabs、List、PullRefresh组件实践

Vant ui Vue.js 部分组件实践功能需求是实现一个移动端的栏目列表切换&#xff0c;于此同时列表需要进行下拉刷新&#xff0c;上拉加载如下图&#xff0c;大概是一个这样的东西看起来是挺简单的&#xff0c;实现起来很方便。没错&#xff0c;我当时也是这么想的&#xff0c;结…

第五季1:AP模式USB-WIFI网卡移植与测试

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 内容总结 &#xff08;1&#xff09;HI3518EWIFI做AP&#xff0c;PC做STA&#xff0c;实现局域网内ortp视频传输。 &#xff08;2&#xff09;HI2518EWIFI做STA&#xff0c;PC做STA&#xff0c;外部…

免费社交类图标集

免费下载 这是一套免费社交类型的图标集&#xff0c;包含35种不同内容的图标。包括当前最热的Instagram&#xff0c;Evernatoe等。和往常推荐的一样&#xff0c;PSD文件可自行调整大小,50*50像素。它们可以被用在商业项目上&#xff0c;如果你也喜欢相关类型的图标&#xff0c;…

第五季2:STA模式USB-WIFI网卡移植与测试

以下内容源于朱有鹏课程&#xff0c;如有侵权&#xff0c;请告知删除。 参考博客 hisi3518ev200移植MT7601_fsczp的博客-CSDN博客 wpa_supplicant移植与使用_andylauren的博客-CSDN博客 Linux wpa_cli 调试方法_weixin_34168700的博客-CSDN博客 12 海思Hi3518E移植WIFI驱动(ST…

关于ping命令的工作原理

2019独角兽企业重金招聘Python工程师标准>>> 当我们在用ping命令ping地址的时候会向target主机发送一个ICMP协议中的echo包&#xff0c;如果对方living&#xff08;活动状态&#xff09;。 则会返回一个echo包。 TTL的值&#xff1a;这个值对我们有什么用&#xff0…

第七季1:分析MP4文件封装格式

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;mp4文件格式解析 - nigaopeng - 博客园&#xff08;推荐&#xff09; &#xff08;2&#xff09;你真的懂 MP4 格式吗&#xff1f; &#xff08;3&#xff09;m…