进程线程协程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了进程线程协程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1902字,纯文字阅读大概需要3分钟。
内容图文
进程
进程是系统进行资源分配和调度的一个独立单位,每个进程都有自己独立的内存空间,不同进程通过进程间通信来通信
线程
线程是进程的一个实体,是CPU调度和分配的基本单位,可与同属于一个进程的其他线程共享进程所拥有的全部资源
协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制
进程与线程区别
线程是指进程内的最小执行单元,也是进程内的可调度实体
-
地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间
-
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
-
二者均可并发执行
协程与线程
-
一个线程可以有多个协程
-
线程进程都是同步机制,协程是异步
-
协程能保留上一次的状态,每次过程重入时,就相当于进入上一次调用的状态
进程线程协程在python中的作用
-
多进程一般使用multiprocessing库,来利用多核CPU,主要用在CPU密集型的程序上,生产者消费者也可以使用。多进程的优势是一个子进程崩溃并不影响其他子进程和和主进程的运行,缺点是不能一次性启动太多进程,会严重影响系统的资源调度,特别是CPU使用率和负载
-
多线程使用threading库,完成一些IO密集型并发操作。多线程的优势是切换快,资源消耗低,但一个线程挂掉会影响到所用线程,所以不稳定,一般使用线程池
-
协程一般使用gevent库,多用在web方向是
-
IO密集型一般使用多线程或者多进程,CPU密集型一般使用多进程,强调非阻塞异步并发的一般使用协程
1 import multiprocessing 2 import time 3 4 5 def func_1(name): 6 print("hello", name) 7 time.sleep(2) 8 910def func_2(): 11print("你好!") 12 time.sleep(2) 131415 pro1 = multiprocessing.Process(target=func_1, args=("gkl", )) 16pro1.start() 17 func_2()
你好!
hello gkl
1 import multiprocessing # 导入多进程模块 2 3 4 mar = multiprocessing.Manager() # 创建一个进程空间,并返回与其通信的管理器 5 mar_list = mar.list() # 通过管理器在服务器进程中开辟一个列表空间,并返回一个代理 6 mar_list.append("天气不错!!!") # 导入数据 方法和列表一致 7print(mar_list) 8 910def sub_process(li): 11 li.append("今天星期二") 121314# 把代理传给子进程,子进程就可以通过这个代理来操作共享空间进行通信15 pro = multiprocessing.Process(target=sub_process, args=(mar_list, )) 16 pro.start() # 运行17 pro.join() # 阻塞 等待子进程完成后继续运行18print(mar_list)
[‘天气不错!!!‘] [‘天气不错!!!‘, ‘今天星期二‘]
1 import threading 2 3 4 data = 0 5 lock = threading.Lock() # 创建一把锁 防止计算混乱 同一进程下的线程共享变量,容易发生紊乱 6 7 8def add(): 9global data 10for i in range(100000): 11 with lock: # 锁 (加锁、释放锁)12 data += 1 131415def sub(): 16global data 17for i in range(100000): 18 with lock: 19 data -= 1 202122 add_td = threading.Thread(target=add) 23add_td.start() 24 sub_td = threading.Thread(target=sub) 25sub_td.start() 26add_td.join() 27sub_td.join() 28print(data)
运行结果为0
原文:https://www.cnblogs.com/gkl123/p/9738852.html
内容总结
以上是互联网集市为您收集整理的进程线程协程全部内容,希望文章能够帮你解决进程线程协程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。