进程、线程、协程区别

进程、线程、协程的区别

进程:操作系统进行资源分配和调度的基本单位, 多个进程之间相互独立。不共享资源

线程:CUP进行资源分配和调度的基本单位, 线程是进程的一部分。同一进程下的不同线程共享该进程的所有资源。

区别

  1. 进程:各个进程之间相互独立,稳定性好, 一个进程崩溃, 不影响其他进程。但是进程消耗的资源多。

  2. 线程:运行效率高, 缺点是稳定性没进程这么好。一个线程崩溃。都会造成进程的崩溃。

应用

  • IO密集的多用于多线程

  • CUP密集的多用于进程。(因为加入IO操作少, 用多线程的话,因为线程共享一个全局解释器锁, 档钱运行的线程会霸占GIL, 就不能利用多核CPU的有事)

  • 协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但是必须自己调度。

通过生成器实现协程

import time
def task_a():
    while True:
        print("task_a before")
        time.sleep(1)
        print("task_a after")
    
def task_b():
    while True:
        print("task_b before")
        time.sleep(1)
        print("task_b after")

t1 = task_a()
t2 = task_b()
while True:
    next(t1)
    print("----------")
    next(t2)

asyncio实现携程

import asyncio
async def task_a():
    while True:
        print("hello world")
        await asyncio.sleep(1)
        
async def task_b():
	while True:
        print("goodbye world")
        await asyncio.sleep(1)

c1 = task_a()
c2 = task_b()
c = asyncio.gather(c1, c2) # 如果有多个异步程序,则用这个管理。
loop = asyncio.get_event_loop()
loop.run_until_complete(c) 
import asyncio
import random
# 需求: 做一个调度器, 每秒增加一个job, job作为爬取网页。

def callback(future): 
    print("callback:",future.result())


async def job(url):
    n = random.randrange(1, 3)
    await asyncio.sleep(n)
    print("下载成功:{0}".format(url))
    return url

async def cron():
    page = 1
    while True:
        await asyncio.sleep(1)
        j = job("www.baidu.com/{0}".format(page))
        task = asyncio.create_task(j)
        task.add_done_callback(callback)
        page += 1

# 加了async关键字的函数,都需要注册给loop进行调控
# await 用来用来声明程序挂起。
        
loop = asyncio.get_event_loop() # linxu的epoll
c = cron() 
loop.run_until_complete(c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值