潭州课堂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()

  

原文地址:https://www.cnblogs.com/gdwz922/p/9321312.html