码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统介绍

时间:2019-08-11 22:55:24      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:self   多核   计算机   reading   随机   ESS   多线程   抽象   遇到   

  

一、多道技术

技术图片

1.空间上的复用

  多个程序共用一套计算机硬件

2.时间上的复用

切换+保存状态

  1).当一个程序遇到IO操作 操作系统会剥夺该程序的cpu执行权限(提高了cpu的利用率 并且也不影响程序的执行效率)

  2).当一个程序长时间占用cpu 操作系统也会剥夺该程序的cpu执行权限(降低了程序的执行效率)

  time.sleep()本质和时间复用一样 睡觉时候操作系统会切换cpu。

3.串行、并发与并行

  串行:程序运行完才能进入下一个程序

  并发:看起来多个任务同时执行即可。单核也可以实现并发

  并行:真正意义上的同时运行,只有多核才能实现。

4.同步异步

  同步异步:表示的是任务的提交方式

  同步:任务提交之后 原地等待的任务的执行并拿到返回结果才走 期间不做任何事(程序层面的表现就是卡住了)

  异步:任务提交之后 不再原地等待 而是继续执行下一行代码(结果是要的 但是是用过其他方式获取)

5.阻塞非阻塞

  阻塞非阻塞:表示的程序的运行状态

  阻塞:阻塞态

  非阻塞:就绪态 运行态

二、创建进程

1.什么是进程?

  进程指的就是一个正在运行的程序,或者说是程序的运行过程,即进程是一个抽象的概念

  为何要进程?     实现并发。

  创建进程就是在内存中重新开辟一块内存空间,将允许产生的代码丢进去。一个进程所对应的内存就是一块独立的内存空间。

  进程与进程之间数据是隔离的,无法直接交互。但是可以通过某些技术实现间接交互。

  同一个程序执行两次,也算是开启了两个进程。

2.创建进程的两种方式

  os.cpu_count() 查看电脑是几个处理器。

  multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。

  进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。

创建进程的第一种方式
from
multiprocessing import Process import time def test(name): print(%s is running%name) time.sleep(2) print(%s is over%name) if __name__ == __main__: p = Process(target=test,args=(li,))# 创建一个进程对象。当容器类型(此处是元组)中只有一个参数时,最好把逗号加上。
  # 第一个传函数的名字过来,第二个传函数要用到的参数。
p.start()# 告诉操作系统帮你创建一个进程 异步 print() #注意:windows创建进程会将代码以模块的方式,从上往下执行一遍 # linux会直接将代码完完整整的拷贝一份 # windows创建进程一定要在if __name__ == ‘__main__‘:代码块内创建 ,否则会报错
创建进程的第二种方式
from multiprocessing import Process
import time
class MyProcess(Process):
    def __init__(self,name):
        super().__init__()
        self.name = name
    def run(self):
        print(%s is running % self.name)
        time.sleep(3)
        print(%s is over % self.name)
if __name__ == __main__:
    p = MyProcess(egon)
    p.start()       #仅仅是告诉操作系统帮你创建一个进程,至于这个进程什么时候创,完全由操作系统随机决定。
    print()

3.join方法

  利用p.start()创建多个进程,无法准确获取到进程创建的先后顺序。仅仅是告诉操作系统帮你创建一个进程,至于这个进程什么时候创,完全由操作系统随机决定。

  p.join(),表示主进程代码需要等子进程运行完才会开始运行。
 os.getpid()可以获取子进程的id。%os.getppid()可以获取父进程的id。
 p.daemon = True  # 将该进程设置为守护进程   这一句话必须放在start语句之前,否则报错。


操作系统介绍

标签:self   多核   计算机   reading   随机   ESS   多线程   抽象   遇到   

原文地址:https://www.cnblogs.com/blue-tea/p/11337024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!