1、操作系统了解

  现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成, 这些都是硬件设备, 而操作系统就是负责调用这些硬件为用户服务的.

  操作系统位于计算机硬件与应用软件之间,本质也是一个软件.

  精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。

2、操作系统发展中几个比较重要的系统阶段

  多道程序系统

     多道程序设计技术,就是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。

    特点: 空间复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序.

        时间复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%.

    缺点: 空间复用:程序之间的内存没有确切分割,不由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存。

        时间复用:必须等某个程序出现I/O阻塞, cpu才会进行切换, 否则该程序一直占用cpu资源.

  分时系统(交互式系统)

    把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的印象是,好象他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。

    特点:

      (1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工作.

      (2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工作方式,又被称为交互式系统.

      (3)及时性。系统可对用户的输入及时作出响应.

      (4)独立性。用户之间可以相互独立操作,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象.
    缺点: 
      计算机的效率变低 ( 分时系统的分时间片工作,在没有遇到IO操作的时候就用完了自己的时间片被切走了,这样的切换工作其实并没有提高cpu的效率,反而使得计算机的效率降低了。为什么下降了呢?因为CPU需要切换,并且记录每次切换程序执行到了哪里,以便下次再切换回来的时候能够继续之前的程序,虽然我们牺牲了一点效率,但是却实现了多个程序共同执行的效果,这样你就可以在计算机上一边听音乐一边聊qq了 ) 。

3、什么是进程

  进程: 就是执行中的程序. 当cpu调用程序计算时才是一个进程. 

  特点:

    动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的  

    并发性:任何进程都可以同其他进程一起并发执行

    独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

    异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

    结构特征:进程由程序、数据和进程控制块三部分组成。

    多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

4、并发与并行

  并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发,(并行也属于并发)

  并行:并行:同时运行,只有具备多个cpu才能实现并行

  内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,即伪并行,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)

5、同步/异步/阻塞/非阻塞

  程序的三个状态

    就绪状态: 当进程已分配到除CPU以外的所有必要的资源,只要获得cpu便可立即执行,这时的进程状态称为就绪状态。

    执行/运行状态: 当进程已获得cup,其程序正在cpu上执行,此时的进程状态称为执行状态。

    阻塞状态: 正在执行的进程,由于等待某个事件发生而无法执行时,便放弃cpu而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

  

  同步: 第一个程序运行完才运行第二个程序, 串行.

  异步: 不需要等待第一个程序结束, 就可以运行第二个程序.

  阻塞: 程序在等待某个指令之外不能做其他的事, 这个机制就是阻塞.

  非阻塞: 程序在等待某个指令之外, 还能做其他的事情, 即非阻塞.

  同步阻塞: 程序被阻塞着, 除了等不能干其他的事情, 效率最低.

  异步阻塞: 异步操作是可以被阻塞的, 不过不是在处理消息时阻塞, 而是在等待消息通知时被阻塞, 效率较低.

  同步非阻塞: 程序没有阻塞, 但要在两种不同的行为之间来回切换, 效率较低.

  异步非阻塞: 可以干其他的事情而且不会被阻塞.

6、创建进程的两种方式

  创建Process类的进程对象.

 import os
from multiprocessing import Process def func1(a):
print(a)
print("执行func1函数")
print("子进程的进程号-----",os.getpid())
print("子进程的父进程的进程号////////",os.getppid()) # 和主进程的进程号一样 def func2():
print("执行func2函数") a = ""
if __name__ == '__main__':
# --------> 在windows下必须要写的, 在创建子进程时, 系统会把当前模块内的所有代码复制一份到子进程中去,
# 加上 if __name__ == '__main__', 子进程运行时, __name__在子进程中为"__mp_main__", 不等于"__main__", 不会被执行. p = Process(target=func1,args=(563,)) # 创建一个进程对象, args参数必须是一个元组的形式
p.start() # 子进程执行start方法,并不是调用子进程, 而是告诉操作系统, 子进程创建好了, 可以让cpu去调用子进程了 print("主进程的进程号+++++",os.getpid())
print("执行到最后了") print(a+"主进程",__name__) # 放在 if __name__ == '__main__' 中, 只能执行一次
print(a+"子进程",__name__) # 会被执行两次

创建进程第一种方式

  继承Process类, 以类的方式创建进程.

 from multiprocessing import Process

 class MyProcess(Process):

     def __init__(self,m):       # 想要传参必须先继承父类的__init__方法, 然后再封装参数在对象中.
super().__init__()
self.m = m def run(self): # 方法名一定是run(), 否则无意义.
print("执行run方法")
print(self.m) if __name__ == '__main__': p = MyProcess(360) # 实例化自己定义的进程类
p.start()

创建进程的第二种方式

参数介绍:   1 group参数未使用,值始终为None

      2 target表示调用对象,即子进程要执行的任务

      3 name为子进程的名称

      4 args表示调用对象的位置参数元组,args=(1,2,'egon',)

      5 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}

7、几种方法

  p.terminate() : 强制终止进程

  p.is_alive() : 如果p还在运行,就返回True

  p.join() : 等待子进程结束后主进程再结束.

  os.getpid() : 获取该进程的进程号

  os.getppid() : 获取该进程父进程的进程号

  p.pid: p进程的进程号

  p.name: p进程的名字

 import time
from multiprocessing import Process class MyProcess(Process): def __init__(self,m): # 想要传参必须先继承父类的__init__方法, 然后再封装参数在对象中.
super().__init__()
self.m = m def run(self): # 方法名一定是run(), 否则无意义.
print("执行run方法")
print(self.m)
time.sleep(5)
print("看看terminate好使不") if __name__ == '__main__': p = MyProcess(360) # 实例化自己定义的进程类
p.start() p.terminate() # 关闭进程,不会立即关闭,有个等着操作系统去关闭这个进程的时间,所以is_alive立刻查看的结果可能还是存活,但是稍微等一会,就被关掉了
print(p.is_alive()) # True
time.sleep(0.1)
print(p.is_alive()) # False

几种方法演示

8、进程之间的数据是隔离的, 一般情况下不同进程间的数据是相互访问不到的.

 from multiprocessing import Process

 numb = 100
class MyProcess(Process): def run(self):
global numb
numb += 100
print("子进程的numb: ",numb) # numb都是200, 异步,每个子进程都开始抢占cpu资源 if __name__ == '__main__': p_lst = []
for i in range(10):
p = MyProcess()
p.start()
p_lst.append(p) # 创建10个进程并加进列表里
for p in p_lst:
p.join() # 等所有的进程都跑完了再走主进程 print(numb) # 还是100, 说明创建的10个子进程都访问不到主进程里的numb, 空间隔离说法成立.

验证进程间的内存互相访问不到

9、僵尸进程: 一个子进程退出, 那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程

   孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

  (了解ok)

python摸爬滚打之day030----进程的更多相关文章

  1. Python之线程、进程和协程

    python之线程.进程和协程 目录: 引言 一.线程 1.1 普通的多线程 1.2 自定义线程类 1.3 线程锁 1.3.1 未使用锁 1.3.2 普通锁Lock和RLock 1.3.3 信号量(S ...

  2. Python全栈【进程、线程】

    Python全栈[进程.线程] 本节内容: 进程 线程 协程 I/O多路复用 进程 1.进程就是一个程序在一个数据集上的一次动态执行过程,进程是资源分配的最小单元. 2.进程一般由程序.数据集.进程控 ...

  3. [转载] python利用psutil遍历进程名字和exe所在目录

    本文转载自: http://www.duanzhihe.com/1594.html http://www.jianshu.com/p/64e265f663f6 import psutil,os,tim ...

  4. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

  5. python全栈开发 * 进程理论 进程创建 * 180724

    一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...

  6. python自带的进程池及线程池

    进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...

  7. Python 多进程编程之 进程间的通信(在Pool中Queue)

    Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...

  8. Python 多进程编程之 进程间的通信(Queue)

    Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...

  9. python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)

    昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...

  10. Python之线程与进程

    今天我们来了解一下Python的线程和进程的管理机制 首先,我们要了解下线程跟进程的概念: 线程(Thread)是操作系统能够进行运算调度的最小的单位,是一堆cpu的指令.他被包含在进程中,是进程中的 ...

随机推荐

  1. get/post比较

    转载: https://www.oschina.net/news/77354/http-get-post-different https://www.cnblogs.com/wswang/p/6054 ...

  2. java 根据Url下载对应的文件到指定位置,读txt文件获取url

    package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

  3. mac os安装shell man中文帮助工具(manpages-zh),即man命令显示中文帮助文档

    一.从官网(http://pkgs.fedoraproject.org/repo/pkgs/man-pages-zh-CN)下载安装包:或者从开源代码(https://github.com/man-p ...

  4. 使用Percona Data Recovery Tool for InnoDB恢复数据

      运维工作中难免会发生一些误操作,当数据库表被误操作删除需要紧急恢复,或者没有备份时,Percona Data Recovery Tool for InnoDB这个工具也已提供一些便捷的恢复. 当然 ...

  5. sklearn交叉验证-【老鱼学sklearn】

    交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始 ...

  6. 使用Type.MakeGenericType,反射构造泛型类型

    有时我们会有通过反射来动态构造泛型类型的需求,该如何实现呢?举个栗子,比如我们常常定义的泛型委托Func<in T, out TResult>,当T或TResult的类型需要根据程序上下文 ...

  7. sort实现ip排序

    说明: 工具:sort linux自带        ”-t” : 表示以那个字符做分割        “-k” :和-t结合使用,表示取那一段为关键字进行排序,后面跟数据,1…n,表示取第几段,也可 ...

  8. JavaScript中作用域和作用域链的简单理解(变量提升)

    通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解 ...

  9. 洛谷.5284.[十二省联考2019]字符串问题(后缀自动机 拓扑 DP)

    LOJ BZOJ 洛谷 对这题无话可说,确实比较...裸... 像dls说的拿拓扑和parent树一套就能出出来了... 另外表示BZOJ Rank1 tql... 暴力的话,由每个\(A_i\)向它 ...

  10. Linux下PHP扩展pdo_mysql

    1.进入PHP源码包ext/pdo目录 cd ext/pdo 2.执行/usr/local/php/bin/phpize[假设PHP的安装目录为/usr/local/php] /usr/local/p ...