关于python中的进程和线程,知道这些就足够了
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于python中的进程和线程,知道这些就足够了,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3503字,纯文字阅读大概需要6分钟。
内容图文
![关于python中的进程和线程,知道这些就足够了](/upload/InfoBanner/zyjiaocheng/933/52df663ea8654e3286aafb89f807ed36.jpg)
1、并发与并行的区别和联系?
并发:一个cpu交替执行多个进程
并行:多个cpu同时执行多个进程
2、程序中的同步和异步?
同步:是指协同合作,相互配合。有执行的先后顺序,比如a和b两个线程同时完成一个任务,a先做,某一时刻它需要b的返回结果才能继续往下做,就通知b来做,b做完了再通知a继续做。
异步:与同步相反,我做好了我告诉你一下之后就自己继续往下做,不管你有没有在做。
3、进程、线程、协程的区别和联系?
区别:
- 进程:操作系统进行资源调度的最小单位,系统中的一个应用程序就是一个进程,如qq,进程与进程之间内存相互独立,进程之间不能直接通信,需通过中间件,进程只能操作子进程
- 线程:cpu进行资源调度的最小单位,进程中的所有线程共享一片内存空间,线程之间可以直接进行通信,线程可以操作其它线程
- 协程:协程又称微线程,是用户态的轻量级的线程,拥有自己的上下文寄存器
联系:
- 线程是进程运行的实际单位
- 线程是进程下的一个单一顺序的控制流,一个进程可以并发多个线程,每个线程可以并行的执行不同任务
- 进程要想操作cpu需经过线程
- 协程是特殊的线程
4、多进程和多线程的区别?
- 进程之间的内存独立,同一个进程下的线程之间内存共享
- 线程之间可以直接通信,进程需要通过中间件才可以
- 进程只能操作其子线程,进程可以操作其它线程
- 创建一个线程很简单,创建一个进程需要对其父进程进行一次克隆
- 多线程,多有线程的进程号都一样,多进程,所有子进程的线程号都不一样
- 多线程可以共享全局变量,多进程不可以,各自有一个拷贝在自己的进程中
5、协程的优势是什么?
- 无上下文切换的开销
- 无原子性操作的锁定和同步的开销
- 方便切换控制流
- 高并发+高扩展性+低成本
6、多线程和多进程分别用于哪些场景?
多线程:适合io操作密集的情况,如聊天室
多进程:适合cpu操作密集的情况,如数据计算
7、全局解释器锁(GIL)是什么?如何解决 GIL 问题?
同一时刻只允许一个线程在运行,属于解释器级别,由操作系统直接进行调度,是Cpython解释器独有的,其它类型的解释器没有
如何解决:
- 换其它的解释器
- 使用多进程
8、Python 中有哪些锁(LOCK)?它们分别有什么作用?
- GIL:全局解释器锁,同一时刻只允许一个线程在运行,属于解释器级别,由操作系统直接进行调度;可以避免大量的加锁解锁操作,保证数据的安全性
- 互斥锁:同一时刻同一个进程下只有一个线程在操作cpu,属于用户级别的锁;可以保护数据的安全性
- 递归锁:互斥锁如果想实现多层嵌套的效果,会造成死锁的线程,递归锁就可以解决这个问题,它就像一个字典,保存了锁的门和门的钥匙
- 信号量:允许同一时刻一定数量的线程同时允许,用于维护资源,比如实现停车场管理的功能
9、Python 中如何实现多线程和多进程?
多线程:使用threading模块的Thread类+循环
多进程:使用multiprocessing模块的Process类+循环
10、守护线程和非守护线程是什么?
程序的主线程运行结束后,会等待非守护线程的运行结束而结束整个程序,当把某些线程设置为守护线程之后,主线程运行结束后,守护线程也会直接结束,不管有没有运行完成。
11、多线程的执行顺序是什么样的?
随机的,由操作系统进行调度
12、多线程非安全和多线程安全?
多线程非安全是指多线程同时操作发生写冲突的情况。
多线程安全是指多线程操作不会发生写冲突的情况。
13、互斥锁是什么?有什么好处和坏处?
指同一时间段同一个进行下只有一个线程在使用cpu,属于用户级别的锁
好处:解决了资源竞争的问题,保证了数据的安全性
坏处:并行变串行,执行效率变低
14、什么是僵尸进程和孤儿进程?
僵尸进程:子进程先于父进程结束,且父进程没有处理子进程的退出状态,这样的子进程称之为僵尸进程,僵尸进程虽然结束了,但是部分的进程信息会残留在内存中,大量的僵尸进程会导致浪费内存资源
孤儿进程:父进程先于子进程运行结束,此时的子进程就成为了孤儿进程,孤儿进程会被系统进程收养,成为系统进程的子进程
15、多线程和多进程如何实现通信?
多线程可以使用Queue、Event实现通信
多进程可以使用Queues、Pipes、Managers实现通信
16、Python 3 中 multiprocessing.Queue() 和 queue.Queue() 的区别?
multiprocessing.Queue()是跨进程通信队列,是进程之间进行通信的队列
queue.Queue()是进程内的非阻塞队列,是线程之间的通信
17、如何使用多协程并发请求网??
可以使用Gevent协程来实现
内容总结
以上是互联网集市为您收集整理的关于python中的进程和线程,知道这些就足够了全部内容,希望文章能够帮你解决关于python中的进程和线程,知道这些就足够了所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。