• # 并发编程 -进程理论-进程的方法


    1.并发编程

     1 """"""
     2 """计算机发展史"""
     3 """
     4 1.计算机发展史
     5     1.手工操作,穿孔卡片
     6         同一个房间同一时刻只能运行一个程序,效率极低
     7     2.联机批处理-随身听
     8         磁带(小红,小王,小李) -->{ 输入机 -(程序,数据)-> 计算机 -(结果)-> 输出机}(用户)
     9         效率虽然有所提升,但仍然很低
    10     3.脱机批处理系统--提高CPU利用率
    11         硬盘 - > 卫星机 - > 内存 - > 主机
    12         作用:避免工作速率快的部件与慢的部件接触,拖慢运行速度
    13 
    14     4.多道技术(*)
    15         1.基于单核研究
    16         单道 -> -> -> 
    17         ps:单道,运行a只能运行a,a完运行b
    18         2.多道技术(a,b程序衔接紧密,当a进入IO时,调走cpu运行b,CPU空置很少)
    19         多道: -> -> -> 
    20             -> -> ->         
    21 """
    22 """
    23 ***多道技术
    24     1.空间上的复用,
    25         多个程序共用一套计算机硬件
    26     2.时间的复用
    27         切换+保存状态
    28         1.当一个程序遇到IO操作,操作系统会剥夺该程序CPU执行权限(提高cpu利用率,并且也不影响程序的执行效率)
    29         2.当一个程序长时间占用cpu 操作系统也会剥夺该程序cpu执行权限(降低了程序的执行效率)
    30 
    31 *并发:看起来像同时运行的就可以了
    32 *并行:真正意义上的同时执行
    33     单核和计算机不能实现并行,但是可以实现并发
    34 """
    1.计算机发展史--多道技术.py

    2.2进程三态图.png


    2.进程三个状态转换图.png

     1 ''''''
     2 """
     3 程序:一坨代码
     4 进程:正在运行的程序
     5 """
     6 """
     7 进程理论
     8 """
     9 """
    10 1.时间片轮转法(多级反馈队列)
    11     时间片:就好比将一秒等分成N份
    12     linux可以给制定程序设置优先级
    13     程序按优先级从高到低执行
    14     
    15 """
    16 """
    17 2.进程三个状态转化
    18     1.就绪态
    19     程序在开始运行之后,并不是立即开始执行代码,而是进入就绪状态,等待操作系统调度开始运行
    20     2.运行态
    21     程序运行状态
    22     # import time
    23     # print('程序开始执行')
    24     3.阻塞态
    25     在这里遇到等待用户输入操作
    26     程序进入阻塞状态
    27     # name = input('name>>>').strip()
    28     4.就绪态
    29     用户输入之后,进程不是立即执行,
    30     而是进入就绪状态,等待操作系统调度继续运行
    31     5.运行态
    32     # print(name)
    33     6.阻塞态
    34     # time.sleep(1)
    35     7.就绪态
    36     8.运行态
    37     # print('程序运行结束')
    38     9.结束
    39 """
    2.进程理论.py
     1 """"""
     2 """
     3 1.同步异步:
     4     表示任务的提交方式
     5     
     6     同步:
     7         任务提交后,原地等待的任务的执行并返回执行结果才走 ,
     8         期间不做任何事
     9         (秩序层面的表现就是卡住了)
    10         
    11     异步:
    12         任务提交后,不在原地等待,而是继续执行下一行代码
    13         (结果是要的 但是通过其他方式过去)
    14 """
    15 # 异步
    16 def func():
    17     print('kfgdldf')
    18 p = func()
    19 # 同步
    20 def coun():
    21     x =1
    22     return x
    23 q = coun()
    24 print(q)
    25 """
    26 2.阻塞非阻塞
    27     表示程序的运行状态
    28     阻塞:阻塞态
    29     非阻塞:运行态,就绪态
    30     
    31 """
    32 """
    33 ps:
    34     强调同步异步,阻塞非阻塞是两队概念,不能混为一谈
    35 """
    3.同步和异步,阻塞和非阻塞.py

    2.创建进程的两种方式

     1 ''''''
     2 """
     3 特性:进程间相互隔离的
     4 """
     5 """
     6 1.创建进程方法一  直接实例化Process,将要执行用target传入
     7 """
     8 
     9 
    10 
    11 from multiprocessing import Process
    12 import time
    13 import os
    14 def task(name):
    15     print("%s is running"%name)
    16     print('son run!')
    17     print('son:%s'%os.getpid())
    18     print('father:%s'%os.getppid())
    19     print('son over!')
    20     time.sleep(3)
    21     print('%s is over'%name)
    22 
    23 
    24 if __name__ == '__main__':
    25     # 创建一个进程对象
    26     q = Process(target=task,args=('llx',))
    27     # 告诉操作系统帮你上见
    28     print(os.getpid())
    29     q.start()
    30     print('')
    31 """
    32 13144
    33 34 llx is running
    35 son run!
    36 son:14280
    37 father:13144
    38 son over!
    39 llx is over
    40 """
    1.创建进程方法一 直接实例化Process,将要执行用target传入.py
     1 """"""
     2 from multiprocessing import Process
     3 import time
     4 import os
     5 class MyProcess(Process):
     6     def __init__(self,name):
     7         super().__init__()
     8         self.name = name
     9     def run(self):
    10         print("%s is running"%self.name)
    11         print('son run:%s'%os.getpid())
    12         time.sleep(3)
    13         print('father run:%s'%os.getppid())
    14         print("%s is over"%self.name)
    15 if __name__ == '__main__':
    16     p = MyProcess('llx')
    17     p.start()
    18     print('')
    19     """
    20 21 llx is running
    22 son run:20772
    23 father run:476
    24 llx is over
    25     """
    2.创建进程方法二 继承Process类,覆盖run的方法,将任务放入run方法中.py
     1 """"""
     2 """
     3 window 创建进程会将代码以模块的方式,从上往下执行一遍
     4 
     5 linux会直接将代码完完整整的拷贝一份
     6 """
     7 """
     8 window 创建进程一定要在if __name__ == '__main__':
     9 代码块内创建,否则报错
    10 """
    11 """
    12 本质:
    13     创建进程 就是内存中重新开辟一块内存空间
    14     将允许产生的代码丢进去,
    15     一个进程对应在内存就是一块独立的内存空间
    16 
    17 """
    18 """
    19 进程与进程之间数据是隔离的
    20     无法直接交互
    21     但是可以通过某些技术实现间接交互
    22 """
    23 from multiprocessing import Process
    24 import os
    25 # def test(name):
    26 #     print("son:%s"%os.getpid())
    27 #     print('f:%s'%os.getppid())
    28 # if __name__ == '__main__':
    29 #     p = Process(target=test,args=('llx',))
    30 #     p.start()
    31 #     print('l')
    32 class MyProcess(Process):
    33     def __init__(self,name):
    34         super().__init__()
    35         self.name = name
    36     def run(self):
    37         print("son:%s"%os.getpid())
    38         print('f:%s'%os.getppid())
    39 if __name__ == '__main__':
    40     p = MyProcess('llx')
    41     p.start()
    42     print('2')
    3.创建进程的原理.py

    3.jion方法

     1 from multiprocessing import Process
     2 import time
     3 
     4 def test(name,i):
     5     print('%s is running'%name)
     6     time.sleep(i)
     7     print('%s is over'%name)
     8 if __name__ == '__main__':
     9     p_list = []
    10     for i in range(3):
    11         p = Process(target=test,args=('进程%s'%i,i))
    12         p.start()
    13         p_list.append(p)
    14     for p in p_list:
    15         p.join()
    16 """
    17 进程0 is running
    18 进程0 is over
    19 进程1 is running
    20 进程2 is running
    21 进程1 is over
    22 进程2 is over
    23 """
    1join方法.py
     1 from multiprocessing import Process
     2 import time
     3 
     4 def test(name,i):
     5     print('%s is running'%name)
     6     time.sleep(i)
     7     print('%s is over'%name)
     8 if __name__ == '__main__':
     9     p_list = []
    10     # for i in range(3):
    11     #     p = Process(target=test,args=('进程%s'%i,i))
    12     #     p.start()
    13     #     p_list.append(p)
    14     # for p in p_list:
    15     #     p.join()
    16     p = Process(target=test,args=('a',1))
    17     p1 = Process(target=test,args=('b',2))
    18     p2 = Process(target=test,args=('c',3))
    19     start_time = time.time()
    20     p.start()  # 仅仅是告诉操作系统帮你创建一个进程 至于这个进程什么时候创  操作系统随机决定
    21     p1.start()
    22     p2.start()
    23     p2.join()
    24     p.join()
    25     p1.join()
    26 
    27     # 主进程代码等待子进程运行结束 才继续运行
    28     # p.join()  # 主进程代码等待子进程运行结束
    29     print('')
    30     print(time.time() - start_time)
    31 
    32 """
    33 a is running
    34 b is running
    35 c is running
    36 a is over
    37 b is over
    38 c is over
    39 40 3.23988938331604
    41 """
    2.join方法解释.py

    4.进程之间数据是相互隔离的

     1 from multiprocessing import Process
     2 import time
     3 
     4 
     5 money = 100
     6 
     7 def test():
     8     global money
     9     money = 99999999
    10     print(money,'11111111111')
    11 
    12 
    13 if __name__ == '__main__':
    14     p = Process(target=test)
    15     p.start()
    16     p.join()
    17     print(money)
    18 
    19 '''
    20 99999999 11111111111
    21 100
    22 '''
    1.进程间数据是相互隔离的,证明.py

    5.进程对象及其他方法

     1 """"""
     2 """tasklist"""
     3 '''
     4 
     5 映像名称                       PID 会话名              会
     6 话#       内存使用
     7 ========================= ======== ================ ======
     8 ===== ============
     9 System Idle Process              0 Services
    10     0          8 K
    11 System                           4 Services
    12     0         24 K
    13 Registry                       120 Services
    14     0     15,636 K
    15 smss.exe                       444 Services
    16     0        524 K
    17 csrss.exe                      648 Services
    18     0      1,832 K
    19 wininit.exe                    820 Services
    20     0      2,592 K
    21 services.exe                   892 Services
    22     0      6,428 K
    23 lsass.exe                      908 Services
    24     0     10,344 K
    25 svchost.exe                     92 Services
    26     0        356 K
    27 .....................
    28 '''
    29 """tasklist|find 20052"""
    30 '''
    31 E:Python课堂内容整理知识点框架函数--装饰器--迭代器--生
    32 成器--常用模块--ATMday30并发编程>tasklist|findstr 20052
    33 pycharm64.exe                20052 Console
    34     5    862,692 K
    35 
    36 '''
    2.cmd,查询端口.py
     1 from multiprocessing import Process,current_process
     2 import os
     3 import time
     4 
     5 def test(name):
     6     print('%s is running'%name,current_process().pid)
     7     print('%s is running'%name,'子进程%s'%os.getppid(),'父进程%s'%os.getppid())
     8     time.sleep(3)
     9     print('%s is over'%name)
    10 if __name__ == '__main__':
    11     p = Process(target=test,args=('llx',))
    12     p.start()
    13     p.terminate()  # 1.杀死当前进程其实是告诉操作系统帮你杀死一个进程
    14     #time.sleep(0.1)
    15     print(p.is_alive()) # 2 .判断进程是否存活
    16     print('',os.getpid(),'主主进程%s'%os.getppid())
    17 
    18 """
    19 True
    20 主 21484 主主进程20052
    21 llx is running 21832
    22 llx is running 子进程21484 父进程21484
    23 llx is over
    24 """
    25 """
    26 E:Python课堂内容整理知识点框架函数--装饰器--迭代器--生
    27 成器--常用模块--ATMday30并发编程>tasklist|findstr 20052
    28 pycharm64.exe                20052 Console
    29     5    862,692 K
    30 
    31 """
    1.进程对象及其他方法.py


    6.僵尸进城,和孤儿进程
    1.僵尸进城.py
    2.孤儿进程.py
    7.守护进程
    守护进程.py
    8.互斥锁
    1.案例,抢票实现案例.py
    2.无锁的买票情况.py
    data
    date

  • 相关阅读:
    HDU 1301 Jungle Roads (最小生成树)
    POJ 1733 Parity game (并查集)
    HDU 3038 How Many Answers Are Wrong (并查集)
    CentOS用yum安装搭建LAMP
    Linux下php安装Redis扩展
    PHPExcel用法
    利用phpmailer类邮件发送
    Vim编辑器配置
    vhost文件设置
    ThinkPHP验证码类
  • 原文地址:https://www.cnblogs.com/llx--20190411/p/11337817.html
Copyright © 2020-2023  润新知