知识回顾、进程的相关知识和操作

1、编程语言的发展:

  机器语言:二进制

  汇编语言:指令,命令形式的

  高级语言:面向过程(C)面向对象(python,c++,java)

2、操作系统的目标:

  为了使用户更方便的使用系统

3、计算机的组成:

  cpu,主板,存储,输入,输出

4、并行、并发

  并发:指两件或多件事情,在同一时间间隔内同时执行(宏观上是并行,微观上是串行)

  并行:指两件或多件事情,在同一时间间隔内同时执行

5、进程有三部分组成:

  代码段,数据段,PCB(进程控制块)

6、进程的三种基本状态:

  就绪状态:除了cpu之外,进程获得了需要的所有资源

  执行状态:进程获取了需要的所有资源正在执行

  阻塞状态:进程由于某些原因放弃了cpu,无法继续执行,此时进程在内存中处于等待状态

  

7、操作系统的介绍

  dos :单用户单进程

  Windows :单用户多进程(早起的Windows)

  unix :多用户用进程

8、为什么要有操作系统?

  1、封装了所有硬件的接口,使用户更加方便的使用

  2、对于计算机内的所有资源,进行合理的调度和分配

9、多进程的模块

  multiprocessing

  Process

10、进程相关知识、操作

  1)同步、异步、阻塞、非阻塞

    同步:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

    异步:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。

    阻塞:做某件事情,直到完成,除非超时

    非阻塞:尝试做,如果不能做,就不做(直接返回),如果能做,就做。

    列子:小李喝了想喝水,于是去煮开水。
        1、小李把水壶放到炉子上,等待水烧开。(同步阻塞)
          小李感觉这样太费时间。
        2、小李把水壶放到炉子上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
          小李还是觉得自己这样太累,于是买了把会响笛的那种水壶。水开之后,能发出声音。
        3、小李把响水壶放到炉子上,等待水壶发出声音。(异步阻塞)
          觉得这样傻等意义不大
        4、小李把响水壶放到炉子上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
          这样真好。

  2)进程的两种开启方法:

    a、p = Process(target=None,args=(,)  target :是子进程要执行的任务,args:是父进程给子进程传递的参数

    b、自定义类,继承Process父类

  3)进程的常用方法

    a、start()  开启一个进程     底层调用的是p.run() 这个方法

    b、join()   异步变同步(就是让父进程停留在join这句话,等待子进程执行结束,父进程再继续执行)--->>>必须在start()后面

    c、is_alive()  判断进程是否活着

    d、terminate()  杀死进程

  4)进程的常用属性

    a、p.name =  name   给p进程一个名字

    b、p.pid                     返回p进程的pid(获取当前进程的pid-->os.getpid()    获取当前进程的父进程的pid---->os.getppid()  )

    c、p.daemon = True   将p进程设置为守护进程。(True为守护进程,False为普通进程)---->>>必须在start()前面

      守护进程的两个特点:

        守护进程会随着父进程的结束而结束

        守护进程不能再创建子进程

补充:1、多进程之间不能共享内存

   2、如何把父进程和子进程之间的关系变为同步或者异步?

      父进程执行join,就会变成同步(join必须放在start()后边),不执行join,父进程和子进程就是异步的关系

from multiprocessing import Process

def func(i):
    global n
    print(n) # 会报错,func函数的内存和if条件下的内存之间不能共享

if __name__ == ‘__main__‘:
    n = 100
    p = Process(target=func,args=(1,))
    p.start()

以下为一些操作的代码:

from multiprocessing import Process # 导入多进程模块
import time
import random

def func(i):
    time.sleep(1)
    print(‘我是%s‘ % i)

if __name__ == ‘__main__‘: # pycharm中运行必须这行代码必不可少
    l = []
    addr = [‘太原的‘,‘长治的‘,‘吕梁的‘,‘运城的‘]
    for i in addr:
        p = Process(target=func,args=(i,)) # 实例化一个子进程对象并传递相应的参数
        p.start() # 开启子进程
        l.append(p)
        p.join() # 异步转成同步 (必须等待上一个执行完才能执行下一个)
    # [i.join() for i in l] # 与p.join()作用一样,但是它的速度比较快
    time.sleep(2)
    print(‘我选%s‘ % random.choice(addr))
##########################开启子进程的一种方式#####################
from multiprocessing import Process
import os
import time

def func(i):
    time.sleep(1)
    print(‘这里是子进程,子进程的pid是%s,子进程的父进程的pid是%s‘ %(os.getpid(),os.getppid()))

if __name__ == ‘__main__‘:
    for i in range(2):
        p = Process(target=func,args=(i,))
        p.start()
    print(‘这里是父进程,父进程的pid是%s,父进程的父进程的pid是%s‘ % (os.getpid(),os.getppid()))

####################开启子进程的另外一种方式,以继承的方式###################
class MyProcess(Process):
    def __init__(self,name):
        super(MyProcess, self).__init__()
        self.name = name
    def run(self):
        print(‘这里以继承类的方式开启的子进程,它是%s‘ % self.name)

if __name__ == ‘__main__‘:
    p1 = MyProcess(‘guo‘)
    p1.start() # 解释器告诉操作系统,去帮我开启一个子进程   就绪状态(start会自动调用MyProcess中的Run方法)
    # p1.run() # 告诉操作系统,现在马上帮我执行这个子进程    执行
##########杀死子进程##############
from multiprocessing import Process
import time

def func():
    print(123)

if __name__ == ‘__main__‘:
    p = Process(target=func,)
    p.start()
    time.sleep(0.15) # 0.1不打印123,0.2都是False了,比较完美的结果了
    p.terminate() # 杀死p进程
    print(‘子进程是否还活着?‘,p.is_alive()) # is_alive()返回一个bool值,True就代表活着,否则就代表死了
    time.sleep(1)
    print(‘子进程是否还活着?‘,p.is_alive())

# 打印结果:
#123
#子进程是否还活着? True
#子进程是否还活着? False
####################守护进程####################
from multiprocessing import Process
import time

def func():
    for i in range(10):
        time.sleep(1)
        print(‘子进程%s‘% time.strftime(‘%H:%M:%S‘))

if __name__ == ‘__main__‘:
    p = Process(target=func)
    p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置(会随着父进程的结束而结束)
    p.start()
    time.sleep(5) # 只会产生4个子进程的结果
    print(‘父进程‘)

原文地址:https://www.cnblogs.com/wjs521/p/9508266.html

时间: 2024-08-24 14:05:53

知识回顾、进程的相关知识和操作的相关文章

linux 创建守护进程的相关知识

linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关知识,需要的朋友可以参考下 关键字:linux.守护进程 创建子进程,父进程退出 这是编写守护进程的第一步.由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象.之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到

进程的相关知识总结

前几篇博文中我已经介绍过进程的创建以及一些基本知识,这里就不再赘述,本篇博文我主要会涉及进程的终止细节以及父进程对子进程的监控,还有函数组exec() 1.进程的终止 (1)_exec()和exit() 进程终止分俩中情况,一种是收到某种信号异常终止,另一种是调用_exit()正常退出 #include<unistd.h> void _exit(int status); 参数status保存了进程的终止状态,父进程可调用wait()获取该状态 #include<stdio.h> v

进程 &amp; 线程相关知识

不管Java,C++都有进程.线程相关的内容.在这里统一整理吧. Python的线程,其实是伪线程,不能真正的并发.下面也有讲. 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈). 多个线程共享内存. 参考了这篇文章:http://www.cnblogs.com/qiaoconglovelife/p/5319779.html 进程与PCB 进程:进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位. 进程实体(进程映像):由程序段.相关数

进程的相关知识

1,对多进程的模块:  multiprocess   Process是进程的模块 form multiprocessing import Process从multiprocessing包中导入Process模块 multiprocess是python中的一个操作管理进程的一个包,multi是取自multiple的多功能的意思,在这个包中,几乎包含了和进程操作的所有模块,有与子模块非常多,为了方便大家学习可以分为四个部分:创建进程部分,进程池部分,进程同步部分,进程之间数据共享 2,进程的并行与并

python---基础知识回顾(八)数据库基础操作(sqlite和mysql)

一:sqlite操作 SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用. 操作步骤: 1.创建连接(记得导入模块) import sqlite3 conn = sqlite3.connect("test.db") #若是文件不存在会自动创建,路径可

Linux进程快照相关知识

查寻内核版本 uname  -a    //  uname  -r 进程快照 ps       report a snapshot of the current processes USER        进程所属用户 PID 进程ID   进程号 %CPU        进程占用CPU百分比 %MEM 进程占用内存的百分比 VSZ 虚拟内存 RSS         真实内存 TTY 终端  terminal STAT 进程的状态 主要状态   (NOTE: 主机状态一条进程只有一个) D  

端口相关知识学习笔记

端口相关知识学习笔记 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍. 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入.计算机的" 大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口.并口.输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

进程和cpu的相关知识和简单调优方案

进程就是一段执行的程序,每当一个程序运行时,对于操作系统本身来说,就创建了一个进程,并且分配了对应的资源.进程可以分为3个类别: 1.交互式进程(I/O) 2.批处理进程 (CPU) 3.实时进程 (REAL-TIME) 对于交互式进程来说,一般其占用的cpu时间片很段,但是优先级偏高;批处理进程占用的cpu时间片很长,但是优先级偏底;实时进程是内核所使用的,其优先级高于前面两种. 上面说到了优先级,linux进程是具有优先级的,一般分为两种: 1.实时优先级 2.静态优先级 实时优先级的取值范