首页 > 系统相关 >进程池,线程,GIL锁,线程池

进程池,线程,GIL锁,线程池

时间:2023-05-13 20:12:32浏览次数:42  
标签:pid 线程 func 进程 GIL cpu

  • 进程池
    • 进程的最佳数量:cpu核数+1
      import os
      os.cpu.count()
    • 多线程最佳数量:cpu核数*5
    • 进程池,一个池子,里面有固定数量的进程,这些进程一直属于待命状态,一旦有任务来,马上进行处理
    • 同步调用 .apply(func,args=( , ))也就是说一个进程池中一个一个去执行任务
    • 异步调用 .apply_async(func,args=( , ),callback = )进程池中进程一次性去执行任务返回值是一个对象,对象.get()获取值
      • 进程池回调函数callback回调函数的pid和主进程pid一样,说明回调函数是主进程调用的,子进程只传值给回调函数
    • .map(func,iterable)
      • func 进程池中执行的任务函数
      • iterable,可迭代对象,依次把元素传给func当参数
  • 线程
    • 一个进程里可以有多个线程,轻量级的进程
    • 切换速度更快
    • 计算机的执行单位,计算机最小可执行单位是线程
    • 线程不可以自己独立拥有资源,线程的执行必须依赖所属进程中的资源
    • 进程中必须至少有一个线程
    • 分为用户级线程和内核级线程
      • 用户级线程,完全被程序员控制和执行
      • 内核级线程,对于计算机内核来说,这样的线程完全被内核控制调度
    • 收时间片影响
    • 收到GIL锁影响
    • 遇到网络延迟会被cpu踢掉,换下一个线程
  • GIL锁28.GIL (itprojects.cn)
    • 全局解释器锁,只有Cpython有,锁的是Python解释器
    • 限制了同一时间只能有一个线程放入cpu,限制了线程的执行时间
    • 对于线程来说 ,因为有GIL锁,所以没有真正的并行,只有并发
    • 如果想使用并行,请使用多进程
  • 进程和线程的对比
    • 子线程的pid和主进程的pid一样,在同一个进程里,所有的线程共享一个pid号
    • 同一个进程内,所有线程共享全局变量
  • 守护线程
    • 根据主线程的结束,线程就结束
  • 定时器
  • 线程池
    • from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    • 提交任务submit#提交多个任务,for + submit 多个任务提交
    • .shutdown() 等效于 Pool 的 close + join 是指不允许往池子中再添加任务,然后让父进程(线程)等待池中所有进程(线程)执行完所有任务
    • .map(func,iterable)也有,返回值是一个生成器
    • 线程池中的回调函数是子线程调用,和父线程没有关系
  •  

标签:pid,线程,func,进程,GIL,cpu
From: https://www.cnblogs.com/leo3notblv/p/17398077.html

相关文章

  • Java--多线程
    Java--多线程进程线程多线程的实现方式方法1:继承Thread类定义一个类继承Thread方法再该类中重写run()方法创建该类的对象启动线程代码示例类publicclassdemoextendsThread{//继承Thread方法@Overridepublicvoidrun(){//重写run方法,把代码片断......
  • 西门子1500PLC博途程序实例,大型程序fanuc机器人汽车焊装自动生产线程序,程序硬件结构包
    西门子1500PLC博途程序实例,大型程序fanuc机器人汽车焊装自动生产线程序,程序硬件结构包括1台西门子1500PLC程序,2台触摸屏TP1500程序9个智能远程终端ET200SPProfinet连接15个Festo智能模块Profinet通讯10台Fanuc发那科机器人Profinet通讯3台G120变频器Profinet通讯2台智能电能管理......
  • 西门子1200灌装线全线程序,程序分为两部分,一部分为实际应用程序,一部分为仿真程序,程序包
    西门子1200灌装线全线程序,程序分为两部分,一部分为实际应用程序,一部分为仿真程序,程序包含PLC程序和触摸屏程序,内容包含手动,自动运行,模拟量处理,数据统计及存储,故障处理,急停处理,报警等相关程序,程序注释清晰,非常适合初学者学习,该程序支持博图13及以上版本ID:6719655443826436......
  • 西门子PLC S1500新能源pack线程序(含触摸屏程序) 此项目程序已经实
    西门子PLCS1500新能源pack线程序(含触摸屏程序)此项目程序已经实际设备成熟稳定应用,程序都有注释、非常适合用来西门子S1500大型项目学习,包括plc程序和西门子触摸屏程序。程序运用梯形图FB,本程序用博图V16打开。ID:4910673682762818......
  • 5.守护进程
    5.守护进程 一、supervisor#epel源yuminstallepel-release#安装supervisoryuminstall-ysupervisor#开机自启动systemctlenablesupervisord#启动supervisord服务systemctlstartsupervisord 在程序配置文件夹/etc/supervisord.d中添加test.ini: [progr......
  • c#中线程安全-记录
    在C#中,值类型的数据不会产生线程不安全。这是因为值类型的数据在内存中是按值存储的,每个线程都有自己的栈空间,因此不会出现多个线程同时访问同一个内存地址的情况。而引用类型的数据则是按引用存储的,多个线程可能会同时访问同一个内存地址,从而导致线程不安全的问题。为了避免这种......
  • Linux多进程工具(自编,适用于编程语言调用)
    linux的多进程工具parallel不好用编写了一个脚本,为了搭配编程语言,方便使用多进程。对手工使用不太友好参数参数名含义无参数名要并行运行的命令,用单/双引号包围,空格分隔-p在每个并行命令运行前执行的命令-h显示帮助信息并退出 用法见下方示例脚本#!/......
  • Linux环境下查看以及杀死僵尸进程
    杀死僵尸进程,方法三比较好用,推荐使用1、查看所有的僵尸进程 ps-A-ostat,pid,ppid|grep-e'[zZ]'例:Z110101这列出了僵尸进程STAT列,进程ID、父进程ID2、杀死所有僵尸进程方法一:通过向父进程发送信号方式杀死,这种方法适用用父进程可以处理信号的情况kill-sSIGCHL......
  • 多线程获取返回值
    有这样一个代码:importthreadingdefaa(data):returndataforiinrange(5):threading.Thread(target=aa,args=(i,)).start()获取返回值:importthreadingimporttimeclassResponse:responses={}defadd_th(self,name,data):self.response......
  • 进程和计划任务管理
    目录一、进程1.基本概念2.父进程与子进程3.静态查看进程信息(1)ps命令(2)选项(3)实操(4)查看指定程序的进程4.动态查看进程信息(1)top命令(2)实操(3)表中部分含义5.查找指定进程并杀死(1)pgrep命令(2)kill命令(3)实操6.查看后台进程状态信息(1)jobs命令(2)实操二、计划任务管理1.管理crontab计......