【刷题Day29】Python/JAVA - 03(浅)

Python

如何在 Python 中管理内存?

在Python中,内存管理主要依赖于自动内存管理机制,即垃圾回收机制。Python使用引用计数和垃圾回收相结合的方式来管理内存,确保无需手动释放内存资源。

  • 引用计数:Python通过引用计数来跟踪每个对象的引用次数。当引用数降为零时,Python会立即回收相关内存。
  • 垃圾回收:Python内置了一个垃圾回收器,专门处理引用循环的问题。例如两个对象彼此引用但都不再被需要时,引用计数无法释放它们,这时候垃圾回收机制就会发挥作用。

Python 中如何实现多线程?

实现多线程可以使用threading模块。threading模块提供了一些基本的功能,方便我们创建和管理线程。通过继承threading.Thread类并重写其run方法,或者直接使用线程对象的构造时提供的target函数,都能实现多线程。

请解释 Python 线程池的工作原理?

Python线程池用于提高多线程应用程序的性能,工作原理如下:

  • 线程池的初始化

    在程序启动时,线程池会预先创建一定数量的线程,这些线程被保存在内存中,处于空闲状态,不消耗CPU资源,仅占用较小的内存空间。预先创建的线程构建了线程池的基础,等待任务。

  • 任务的提交

    当有新任务需要执行时,这些任务不是直接创建新的线程来执行,而是提交到线程池中来执行。线程池中的任务通过任务队列(Task Queue)进行管理,所有待执行的任务都被存储在任务队列中。

  • 任务的分配与执行

    线程池中的线程会不断轮询任务队列,检查是否有新的任务需要执行。一旦发现任务队列中有任务,线程就会从队列中取出任务并执行。任务的执行是并发的,多个线程可以同时执行不同的任务。任务执行完后,结果会被存储,并且可以通过Future对象来获取。

  • 线程的重用与回收

    当一个线程完成一个任务的执行后,并不会立即被销毁,而是返回到线程池中等待下一个任务的到来。从而免了频繁地创建和销毁线程所带来的开销,提高了程序的性能。


Java

你了解 Java 线程池的原理吗?

线程池是一种池化技术,用于预先创建并管理一组线程,避免频繁创建和销毁线程的开销,提高性能和响应速度。它几个关键的配置包括:核心线程数、最大线程数、空闲存活时间、工作队列、拒绝策略

主要工作原理如下:

  • 默认情况下线程不会预创建,任务提交之后才会创建线程(不过设置prestartAllCoreThreads可以预创建核心线程)。
  • 当核心线程满了之后不会新建线程,而是把任务堆积到工作队列中。
  • 如果工作队列放不下了,然后才会新增线程,直至达到最大线程数。
  • 如果工作队列满了,然后也已经达到最大线程数了,这时候来任务会执行拒绝策略。
  • 如果线程空闲时间超过空闲存活时间,并且当前线程数大于核心线程数的则会销毁线程,直到线程数等于核心线程数(设置allowCoreThreadTimeOut为true可以回收核心线程,默认为false

你使用过哪些 Java 并发工具类?

ConcurrentHashMap

AtomicInteger

Semaphore

CyclicBarrier

CountDownLatch

BlockingQueue

什么是 Java 的 CAS(Compare-And-Swap)操作?

CAS是一种硬件级别的原子操作,它比较内存中的某个值是否为预期值,如果是,则更新为新值,否则不做修改。

工作原理:

  • 比较:CAS会检查内存中的某个值是否与预期值相等。
  • 交换:如果相等,则将内存中的值更新为新值。
  • 失败重试:如果不相等,说明有其他线程已经修改了该值,CAS操作失败,一般会利用重试,直到成功。
相关推荐
Pyeako1 分钟前
Opencv计算机视觉--边界填充&图像形态学
人工智能·python·opencv·计算机视觉·pycharm·图像形态学·边缘填充
古城小栈5 分钟前
Tokio:Rust 异步界的 “霸主”
开发语言·后端·rust
深蓝海拓7 分钟前
PySide6,QEventLoop.exec()的使用
笔记·python·qt·学习·pyqt
中等生8 分钟前
Fastapi中的 lifespan
python
涵涵(互关)8 分钟前
JavaScript 对大整数(超过 2^53 - 1)的精度丢失问题
java·javascript·vue.js
_OP_CHEN8 分钟前
【从零开始的Qt开发指南】(二十)Qt 多线程深度实战指南:从基础 API 到线程安全,带你实现高效并发应用
开发语言·c++·qt·安全·线程·前端开发·线程安全
进击的丸子8 分钟前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
java·后端·github
小北方城市网9 分钟前
微服务架构设计实战指南:从拆分到落地,构建高可用分布式系统
java·运维·数据库·分布式·python·微服务
winfredzhang10 分钟前
自动化从文本到目录:深度解析 Python 文件结构管理工具
python·ai·nodejs·文件结构
开开心心_Every11 分钟前
离线黑白照片上色工具:操作简单效果逼真
java·服务器·前端·学习·edge·c#·powerpoint