• 潭州课堂25班:Ph201805201 并发(进程,线程) 第十一课 (课堂笔记)


    线程,进程,是实现并发的方法,

    并行:

      在同一时刻,同时运行多个任务,CPU 的数量大于等于任务数量,

    并发:

      在同一时间间隔内, 同时处理多个任务,

      并行是并发。

    进程:表示一个正在执行的程序,

      操作系统负责其上所有的执行

    多进程 

    import multiprocessing
    # from multiprocessing import process
    import time
    
    # 模拟一个好使任务
    
    print('a:',time.asctime(time.localtime(time.time())))
    
    def func():
        print('b:',time.asctime(time.localtime(time.time())))
        time.sleep(5)
        print('c:',time.asctime(time.localtime(time.time())))
    
    
    
                   #  进程实例  Process( target=func ,args=)
    p = multiprocessing.Process( target=func )
    p.start()       #    启动
    
    time.sleep(5)
    print('d:',time.asctime(time.localtime(time.time())))
    #  相当于两个 time.sleep(5) 同时运行
    

      

    多个进程:

    for i in range(30):
    p = multiprocessing.Process( target=func )
    p.start()

      

    多进程并行的必要条件:

        总进程数理不多于 CPU 核心数量

        所以,现在运行的程序都是轮询调度产生的,

        但在 python 层面的确获得了并行,

    多线程实现并发:  

        线程,是执行的最小单元 ,多线程:是一个进程 中同时开户多个线程,线程可以被中断,也可以被挂起

          GIL锁,在 python  里,一个进程一次只能有一个线程运行,

      

        进程:进程当中最少有一个线程,是操作系统分配资源的基本单位,

    线程:

    # import multiprocessing        #  进程
    from threading import Thread    #  线程对象
    import time
    
    # 模拟一个好使任务
    
    print('a:',time.asctime(time.localtime(time.time())))
    
    def func():
        print('b:',time.asctime(time.localtime(time.time())))
        time.sleep(5)
        print('c:',time.asctime(time.localtime(time.time())))
    
    
    
                   #  进程实例  Process( target=func ,args=)
    
    p = Thread( target=func )
    p.start()       #    启动
    
    time.sleep(5)
    print('d:',time.asctime(time.localtime(time.time())))
    #  相当于两个 time.sleep(5) 同时运行
    

    当线程遇到阻塞,睡眠,就会切换运行

     在 linux 中

    import os,time
    
    pid = os.fork()    # 只要执行这个方法,就会COPY一个新的进程 
    if pid == 0:
        print('子进程',pid)   #  永远是 0
    else:print('父进程 ',pid)  # 返回的是子进程的 pid 值,
    time.sleep(0.1)
    

      

    因为两个进程都执行,同时两个成立,

    多进程实现并发

    #  多进程实现并发,
    from socket import *
    from multiprocessing import Process
    
    server = socket()
    server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)        #  重用端口
    server.bind(('127.0.0.1', 10001))
    server.listen(5)
    
    
    def fun(conn):
        while True:
            try:
                r = conn.recv(1024)
                if not r: break
                conn.send(r)
            except Exception:
                break
    
    
    if __name__ == '__main__':  # windows下
        while True:
            conn, addr = server.accept()
            p = Process(target=fun, args=(conn,))
            p.start()
    

      

    多线程实现并发

    #  多进程实现并发,
    from socket import *
    from threading import Thread
    
    server = socket()
    server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)        #  重用端口
    server.bind(('127.0.0.1', 10001))
    server.listen(5)
    
    
    def fun(conn):
        while True:
            try:
                r = conn.recv(1024)
                if not r: break
                conn.send(r)
            except Exception:
                break
    
    
    if __name__ == '__main__':  # windows下
        while True:
            conn, addr = server.accept()
            p = Thread(target=fun, args=(conn,))
            p.start()
    

      

  • 相关阅读:
    Oracle数据库编程
    使用JDBC处理MySQL大文本和大数据
    phpcms之带图片的登录信息(带cookie版)(由于cookie和PHPCMS的原因,这个暂时无法使用,看新的)
    phpcms之调用导航栏
    phpcms之修改默认显示文字
    phpcms之创建自己的路径
    dedecms 动态tab写法
    关于dedecms的操作
    12/23
    12/21
  • 原文地址:https://www.cnblogs.com/gdwz922/p/9321312.html
Copyright © 2020-2023  润新知