• day9--回顾


    线程  vs   进程

      进程:一堆资源集的集合。线程:操作系统能够调度的最小单位。

      进程和线程的谁快是误区,进程至少包含一个线程,是没有可比性的。

      线程:共享内存,两个线程同时操作一个数据,要加锁。全局GIL lock解释性锁。Lock,加锁;RLock()递归锁,即嵌套锁。线程同时操作一份数据的时候加锁。互斥锁(mutex)

      join()等待线程执行结束。t = threading.Thread(target=函数名,args=(参数,)),t.start(),启动线程。

    等待所有线程执行完毕,需要借助一个列表,把所有启动的线程添加到列表中,然后遍历,使用join()

      线程里面,要想实现线程之间的交互,可以使用Event,通过设置标签,event.set()来让线程执行,清楚标签,event.clear(),清楚标签,让线程等待,就能实现两个线程之间的交互,启动不同的线程,通过检测标签是否存在,让另外一个线程执行或等待。

      queue队列,通过队列的put()和get(),如果线程满了,就不能存入,如果线程空了,则不能获取,就会阻塞,来实现交互。

      守护线程(setDaemon()):服务于非守护线程,当非守护线程结束之后,守护线程不管执行完毕没有,都会停止。setDaemon(True)设置守护线程。在start()之前设置。

        queue(队列):1.程序的解耦,使程序之间实现松耦合;2.提高效率。进程间数据的安全交换。

        FiloQueue() :后入先出

        PriorityQueue():优先级queue,第一个是等级,第二个是值。

        io操作不占用CPU,计算占用CPU。io:如从网上读取数据,从内存读取数据;

        Python多线程是假的多线程,就是一个线程来回上下文切换,大量的计算使用多线程就不快,还不如单线程;

        Python多线程,不适合CPU密集操作型的任务,适合io操作密集型的任务。socketServer是io密集型任务。

        CPU密集型任务如何操作:多进程来操作,进程之间是独立的。Python线程和进程都是使用操作系统的原生线程和进程。

        线程之间是相互独立的。

  • 相关阅读:
    DOM2DOM3续
    总结 @ 在 C# 中的用法 (装载)
    ORACLE10G卸载过程
    .net中访问oracle数据库的几种方式(转载)
    试图运行项目时出错,无法启动调试。没有正确安装调试器。请运行安装程序安装或修复调试器
    设计模式 构造器
    设计模式 抽象工厂
    linq中日期格式转换或者比较,程序报错说不支持方法的解决办法
    bootstrap图标字体不出来问题的解决办法
    JavaScript对象属性访问的两种方式
  • 原文地址:https://www.cnblogs.com/gengcx/p/7500315.html
Copyright © 2020-2023  润新知