进程
Posted dongye95
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程相关的知识,希望对你有一定的参考价值。
什么是进程
进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。
进程与程序的区别
程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。
需要强调的是:同一个程序执行两次,那也是两个进程,比如打开播放器,虽然都是同一个软件,但是一个可以播放第一集,一个可以播放第二集。
并发与并行
并行
: 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;(资源够用,比如三个线程,四核的CPU )
并发
: 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。
区别
:
并行
是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
并发
是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个session。
所有的这些进程都需被管理,于是一个支持多进程的多道程序系统
是至关重要的
多道技术概念:
内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,即伪并发,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)
同步\\异步and阻塞\\非阻塞(重点)
进程状态介绍
在了解其他概念之前,我们首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。
(1)就绪(Ready)状态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
(2)执行/运行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
(3)阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
同步、异步
同步和异步关注的是消息通知机制
。
所谓同步,就是在发出一个调用
时,在没有得到结果之前,该调用
就不返回。但是一旦调用返回,就得到返回值了。
异步相反,调用
在发出之后,这个调用就直接返回了,所以没有返回结果。当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用
发出后,被调用者
通过状态、通知来通知调用者,或通过回调函数处理这个调用。
同步比喻
老板(调用者):那个excel处理一下,马上发给我。
你(被调用者):没有回任何消息,直到吭哧吭哧做完了excel,发送给了老板。
异步比喻
老板(调用者):那个excel处理一下,马上发给我。
你(被调用者):先回复好的,然后吭哧吭哧做完了excel,发送给了老板。
阻塞、非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)
时的状态
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
阻塞比喻
老板对领导:尽快给我个excel
领导直接来到你的位置:给我弄个excel。并且现场盯着你弄,你不弄完他不走。(领导被阻塞)
非阻塞比喻
老板对领导:尽快给我个excel
领导对你:尽快给我个excel。然后领导不管你有没有回答,继续看股票
关于unix和windows创建进程
1. 在UNIX中该系统调用是:fork,fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件(在shell解释器进程中,执行一个命令就会创建一个子进程)
2. 在windows中该系统调用是:CreateProcess,CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。
相同的是:
进程创建后,父进程和子进程有各自不同的地址空间(多道技术要求物理层面实现进程之间内存的隔离),任何一个进程的在其地址空间中的修改都不会影响到另外一个进程。
不同的是:
在UNIX中,子进程的初始地址空间是父进程的一个副本,提示:子进程和父进程是可以有只读的共享内存区的。但是对于windows系统来说,从一开始父进程与子进程的地址空间就是不同的。
以上是关于进程的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段