进程

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系统来说,从一开始父进程与子进程的地址空间就是不同的。

以上是关于进程的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段

线程学习知识点总结

多线程编程

片段中的Android致命异常