计算机发展史 进程

多道技术

1.空间上的复用: 多个程序共用一套计算机硬件

2.时间上的复用: 切换+保存状态

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

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

  并发:看起来像同时运行的就可以
       并行:真正意义上的同时执行
            单核的计算机能不能实现并行,但是可以实现并发

同步异步:表示的是任务的提交方式
        同步:任务提交之后 原地等待的任务的执行并拿到返回结果才走 期间不做任何事(程序层面的    表现就是卡住了)
        异步:任务提交之后 不再原地等待 而是继续执行下一行代码(结果是要的  但是是用过其他方式    获取)

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

创建进程的两种方式

# 创建进程会将代码以模块的方式从上往下执行一遍
方式一
from multiprocessing import Process
import time
def test(name):
    print(‘%s‘%name)
    time.sleep(1)
    print(‘hi‘)
if __name__ == ‘__main__‘:  #在创建进程时,在if __name__ == ‘__main__‘:内创建
    p = Process(target=test,args=(‘egon‘,))  #创建一个进程对象
    p.start()  #告诉操作系统,要创建一个进程
    time.sleep(1)
    print(‘hello‘)
方式二
from multiprocessing import Process
import time
class MyClass(Process):
    def __init__(self,name):
        super().__init__()
        self.name = name
    def test(self):
        print(‘%s‘%self.name)
        time.sleep(1)
        print(‘hi‘)
if __name__ == ‘__main__‘:
    p = MyClass(‘egon‘)
    p.start()
    p.test()
    print(‘gun‘)

join方法是先执行完子程序之后. 在执行主程序

from multiprocessing import Process
import time
def test(name,i):
    time.sleep(i)
    print(‘hello‘)
if __name__ == ‘__main__‘:

    # p_list = []
    # for i in range(3):
    #     p = Process(target=test,args=(‘进程‘,i))
    #     p.start()
    #     p_list.append(p)
    # for p in p_list:
    #     p.join()
    # print(‘gun‘)

    p = Process(target=test,args=(‘egon‘,1))
    p1 = Process(target=test,args=(‘jason‘,2))
    start_time = time.time()
    p.start()
    p1.start()
    p.join()
    p1.join()
    print(‘hi‘)
    print(time.time()-start_time)

进程对象的其他方法

from multiprocessing import Process,current_process
import os
import time
def test(name):
    print(‘%s‘%name,current_process().pid,‘子进程%s‘%os.getpid(),‘父进程%s‘%os.getppid())
    time.sleep(2)
    print(‘hello‘)
if __name__ == ‘__main__‘:
    p = Process(target=test,args=(‘egon‘,))
    p.start()
    time.sleep(1)
    p.terminate()  # 杀死当前进程,本质是让操作系统帮你去杀死一个进程
    time.sleep(1)
    print(p.is_alive())  # 判断进程是否存活
    print(‘gun‘)

僵尸进程与孤儿进程
    
父进程回收子进程资源的两种方式
       1.join方法
       2.父进程正常死亡
 所有的进程都会步入僵尸进程
              
  孤儿进程
        子进程没死 父进程意外死亡           
          针对linux会有儿童福利院(init) 如果父进程意外死亡他所创建的子进程都会被福利院收养

守护进程

from multiprocessing import Process
import time
def test(name):
    print(‘%s‘%name)
    time.sleep(1)
    print(‘%s‘%name)
if __name__ == ‘__main__‘:
    p = Process(target=test,args=(‘egon‘,))
    p.daemon = True   # 将该进程设置为守护进程
    p.start()
    time.sleep(1)
    print(‘bye‘)

互斥锁
        当多个进程操作同一份数据的时候 会造成数据的错乱
        这个时候必须加锁处理
            将并发变成串行
                虽然降低了效率但是提高了数据的安全
            注意:
                1.锁不要轻易使用 容易造成死锁现象
                2.只在处理数据的部分加锁 不要在全局加锁
        
        锁必须在主进程中产生 交给子进程去使用

from multiprocessing import Process,Lock
import time
import json
def search(i):
    with open(‘data‘,‘r‘,encoding=‘utf-8‘)as f:
        data = f.read()
    t_d = json.loads(data)
    print(‘用户%s查询余票%s‘%(i,t_d.get(‘ticket‘)))
def buy(i):
    with open(‘data‘,‘r‘,encoding=‘utf-8‘)as f:
        data = f.read()
    t_d = json.loads(data)
    time.sleep(1)
    if t_d.get(‘ticket‘) > 0:
        t_d[‘ticket‘] -= 1
        with open(‘data‘,‘w‘,encoding=‘utf-8‘)as f:
            json.dump(t_d,f)
        print(‘抢票成功‘)
    else:
        print(‘没票了‘)
def run(i,mutex):
    search(i)
    mutex.acquire()  # 抢锁
    buy(i)
    mutex.release()  #释放锁
if __name__ == ‘__main__‘:
    mutex = Lock()   #生成一把锁
    for i in range(10):
        p = Process(target=run,args=(i,mutex))
        p.start()

data文本文档
{"ticket": 0}

原文地址:https://www.cnblogs.com/zrh-960906/p/11329407.html

时间: 2024-10-07 16:27:56

计算机发展史 进程的相关文章

计算机发展史(转)

计算机发展史 话不多说,直接带大家一起感受这段波澜壮阔的历史. 1642年 法国 帕斯卡(B.Pascal)发明的机械计算机,可用于计算加减法. 1834年 英国 查尔斯·巴贝奇设计了分析机,采用打孔纸带作为输入输出方式. 1842年 英国 阿达·洛芙莱斯(Ada Lovelace)发明了第一个计算机程序,用于在分析机上计算伯努利数,建立了循环和子程序概念. 1936年 英国 艾伦·图灵提出了"图灵机"的理论模型,为现代计算机的逻辑工作方式奠定基础. 1937年 世界上第一台电子计算机

计算机发展史与进程

目录 1.操作系统发展史 1).穿孔卡片 2).联机批处理系统 3).脱机批处理系统 4).多道技术 2.进程 程序与进程 进程调度: 程序运行时的三个状态: 同步和异步: 阻塞与非阻塞: 创建进程的两种方式 方式一:定义一个任务 方式二:自定义一个类,并继承Process 1.操作系统发展史 1).穿孔卡片 ? 一个机房一次只能使用一个卡片 ? CPU使用率极低 2).联机批处理系统 ? 支持多用户使用一个计算机机房. 3).脱机批处理系统 ? 高速磁带提升了读取的速度,提高了CPU的利用率.

计算机发展史(多道技术)

1.串行: 一个任务完完整整地运行完毕后,才能运行下一个任务 2.并发(伪并行) 看起来多个任务是同时运行的即可,单核也可以实现并发 3.并行: 真正意义上多个任务的同时运行,只有多核才实现并行 4.cpu的功能: cpu是用来做计算,cpu是无法执行IO操作的,一旦遇到io操作,应该让cpu去执行别的任务 5.多道技术(针对单核而言) 1.多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,  解决方式即多路复用,多路复用分为时间上的复用和空间上的复用. 1.

计算机操作系统的进程和线程

操作系统 分时系统      由于CPU速度不断提高和采用分时技术,一台计算机可同时连接多个用户终端,而每个用户可在自己的终端上联机使用计算机,好象自己独占机器一样.      分时技术:把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用.      特点: (1)多路性.若干个用户同时使用一台计算机.微观上看是各用户轮流使用计算机:宏观上看是各用户并行工作. (2)交互性.用户可根据系统对请求的响应结果,进一步向系统提出新的请求.这种能使用户与系统进行人机对话的工作方

计算机发展史及(python3入门)

1. 操作系统的历史 第一代计算机: 特点: a. 在一定的时间内,程序员独享整个计算机的资源 b. 没有操作系统的概念, 直接操作的是硬件设备 缺点: a. 浪费计算机资源,一个时间段内只有一个人用. b. 同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串行的 第二代计算机: 特点: a. 批处理系统解决一个人使用的问题 缺点: 1.整个流程需要人参与控制,将磁带搬来搬去(中间俩小人) 2.计算的过程仍然是顺序计算->串行 3.程序员原来独享一段时间的计算机,现在必

「MoreThanJava」计算机发展史—从织布机到IBM

「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 不论新老朋友 我相信您都可以 从中获益.如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! 一.织布机 | 一切的开端 如今代表智能现代的计算机与老式织布机的血缘关系超乎你的想象.无论是摆在写字台上的 台式机.塞在口袋里的 掌上电脑.

020002_计算机发展史

一.什么是计算机? 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能,是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备. 程序自动化:可以将预先编好的程序组纳入计算机内存,在程序控制下,计算机可以连续.自动地工作,不需要人的干预. 高速:当今计算机系统的运算速度已达到每秒万亿次,普通电脑也可达每秒亿次以上,使大量复杂的科学计算问题得以解决. 二.计算机的发展过程 1946年2月14日,世界上第一台电子

计算机发展史

long long ago 老祖宗的算盘 ...数百年之后.... 1623 1623年,德国科学家契克卡德(Wilhelm Schickard)制造能够进行6位数的加减运算,是为了帮助自己的挚友天文学家开普勒(kepler)做机械运算,但是这个发明很晚世人发现. 1642 法国科学家帕斯卡为了帮助父亲费力的计算税率税款,19岁的帕斯卡研发出一种系列齿轮组成的,外壳用黄铜材料制作,长20英寸宽4英寸高3英寸的厂方盒子计算器,面板上有一列显示数字的小窗口,旋紧发条后才能转动, 用专用的铁笔来拨动转

002_计算机发展史和未来方向

计算工具的演化经历了由简单到复杂.从低级到高级的不同阶段,例 ENIAC计算机 如从"结绳记事"中的绳结到算筹.算盘计算尺.机械计算机等.它们在不同的历史时期发挥了各自的历史作用,同时也启发了现代电子计算机的研制思想. 1889年,美国科学家赫尔曼·何乐礼研制出以电力为基础的电动制表机,用以储存计算资料. 1930年,美国科学家范内瓦·布什造出世界上首台模拟电子计算机. 1946年2月14日,由美国军方定制的世界上第一台电子计算机"电子数字积分计算机"(ENIAC