zoukankan      html  css  js  c++  java
  • python学习第二十八节(进程,线程)


    一个进程可以开启多个线程,当线程共用一个数据集的时候,都可以访问一个数据集。
    可以省内存空间等等。
    一个进程最少会有一个主线程。
    线程必须在进程中。
    线程是最小的执行单元。
    进程是最小的资源管理单元。

    切换的操作者:操作系统
    进程/线程切换原则:
    1、时间片
    2、遇到IO操作切换。(input/socket.recv等等,这些函数不会占用CPU,直接切走)

    python有全局解释器锁
    所以不能实现一个进程内的线程无法同一时刻内实现并行。

    threading模块有个thread类

    由于同一时刻内 一个进程只能执行一个线程,所以属于并发。

    activeCount()显示线程数量

    join() 等待,阻塞。 如果t1 t2子线程不执行结束 后面主线程不执行

    给子线程设置了守护线程之后,只要主线程执行完毕就不等子线程了,直接退出 程序。
    如果主线程是非守护线程,子线程默认继承主线程,也是非守护线程。
    如果子线程中有一个开了守护线程,那主线程结束后依然会判断是否有非守护线程的子线程,如果有依旧执行,如果时间比守护线程久,守护线程会执行结束,如果比守护线程短,守护线程不会执行完毕。
    主线程和子线程如果运行完,只要有一个没有结束,其他的都结束,并没有消失,
    所以threading.activeCount()可以看到所有的数量。
    多线程的好处在IO密集型任务。程序中存在大量的IO操作。
    计算密集型任务,程序存在大量计算任务。还不如顺序执行,多线程反而慢很多。如下图:

    每次切换,还需要保存运算结果,所以时间比较慢。

  • 相关阅读:
    【转】python:让源码更安全之将py编译成so
    [转]Ubuntu python-config
    【转】动态复权(真实价格)模式原理详解!
    [转]Aroon Indicator
    LeetCode 852. Peak Index in a Mountain Array
    LeetCode 1257. Smallest Common Region
    LeetCode 1034. Coloring A Border
    LeetCode 348. Design Tic-Tac-Toe
    LeetCode 452. Minimum Number of Arrows to Burst Balloons
    LeetCode 733. Flood Fill
  • 原文地址:https://www.cnblogs.com/ArmoredTitan/p/7200775.html
Copyright © 2011-2022 走看看