线程

每个进程里都有一个控制线程,进程不是一个执行单位,线程是执行单位,进程是资源单位(资源隔离)。
进程下可以开多个线程,多线程共享进程内的资源。
创建线程的速度比创建进程的速度快,因为创建线程不需要再申请内存空间申请资源等。进程间完全独立,一个进程内的线程资源共享。
#进程之间是竞争关系,线程之间更多的是协作关系。

多线程

进程内除了控制线程,还有别的线程即为多进程。
多线程共享一个进程的地址空间。

开启多线程的两种方式:

  • threading模块的Thread方法。
    t=Tread(target=module,args=...) t.start()
    t.join()\
  • 自己定义一个类,继承Thread方法。
    自己继承重新封装一下init方法。

#多个线程的PID是一样的。内存空间是共享的。
为了防止资源竞争抢占,也需要加互斥锁
使用方式与进程使用一样。

GIL

cpython所独有的。全局解释器锁,互斥锁。 \

启动时,会先加载解释器的C代码,再加载执行python文件的代码,把执行文件代码当做参数传给C代码,由C代码来执行。
每启动一个进程,除了主线程,解释器还会启动一个垃圾回收线程。
弃用的数据,被垃圾回收线程和用户线程同时要支配这个数据。会矛盾,所以需要锁住解释器的代码。
python的线程不会有并行的情况。

#python利用多核要依靠多进程 。

守护线程

和守护进程的区别:
进程内多个线程时,主线程结束条件是非主线程+守护线程之外的线程都结束后主线程才算结束。

死锁与递归锁

死锁:1拿到了A锁,要拿B锁,2拿着B锁要拿A锁,于是就死锁了。

递归锁:每次被acquire计数就+1

,release一次计数器就减1,为0是其他线程才能强。
用一个计数的方式,实现可以不断acquire,知道计数器被release释放为0其他线程才能去强。

信号量

threading模块的semaphore方法。
sm = semaphore(5)
with sm:
#或者acquire release调用
在有N多个线程时,控制同一时间有多少线程在运行。与线程池不同。\

线程池

threadpoolexcept方法,用法与进程池一样,默认的最大线程池是CPU核数的5倍。
其中的map方法,参数(函数,量)

多XX,XX池应用场景

多XX,特别小规模
XX池,在问题规模还在可控范围内时使用。\

定时器

threading模块下的timer方法,参数(数字,函数,多久后执行)

线程queue

queue模块,queue.Queue(),队列 LifoQueue后进入先出,堆栈 PriorityQueue 优先级队列。数字越小优先级越高。(优先级,数据)

事件

event,有isset方法、wait方法、set方法、clear方法

并发编程需要掌握

    • 开进程,开线程
    • 生产者消费者模型**
    • GIL全局解释器锁,与,用户自定义的互斥锁
    • 进程池、线程池 --回调机制

最新文章

  1. 4.JAVA之GUI编程事件监听机制
  2. Oauth2.0认证---授权码模式
  3. 学习总结 初步了解HTML课程
  4. Java应用短信猫
  5. React组件的生命周期各环节运作流程
  6. 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件
  7. 如何通过Visual Studio来管理我们的数据库项目
  8. JAVA 发送邮件代码---发送文本内容: 内容使用\n 进行换行
  9. smarty的学习计划(2)
  10. java的字符串操作和for循环的使用
  11. Hadoop2.0 HA集群搭建步骤
  12. vim各种编码设置问题
  13. 17.Odoo产品分析 (二) – 商业板块(10) – 电子商务(1)
  14. 异常小结:上一张图搞清楚Java的异常机制
  15. LNMP环境的搭建(yum)方法(精)
  16. 剑指Offer 26. 二叉搜索树与双向链表 (二叉搜索树)
  17. Unity中物体碰撞后去掉相互之间的反弹力
  18. Docker技术入门与实战 第二版-学习笔记-6-仓库
  19. CASE WHEN 及 SELECT CASE WHEN的用法(写了一坨烂代码发现两条sql就行了, 哎)
  20. 【Spring】Spring MVC文件上传--整合bootstrap-fileinput和jQuery-File-Upload

热门文章

  1. 单例模式(C#实现)
  2. Codeforces Round #249 (Div. 2) 总结
  3. 如何用Bugzilla系统管理产品研发过中相关需求和bug
  4. springboot整合dubbo的简单案例
  5. ScrollView双击图片定点放大
  6. Oracle Multitenant Environment (二) Purpose
  7. ZOJ 3675 Trim the Nails(bfs)
  8. 当你买了一辆全车搭载Android操作系统的某侠电动汽车以后
  9. Unity3D开发——LeRunning的人物角色信息的显示
  10. JavaSE学习笔记--Item1 注解Annotation