【刷题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操作失败,一般会利用重试,直到成功。
相关推荐
铲子Zzz27 分钟前
Java使用接口AES进行加密+微信小程序接收解密
java·开发语言·微信小程序
霖檬ing32 分钟前
K8s——配置管理(1)
java·贪心算法·kubernetes
小小小新人121231 小时前
C语言 ATM (4)
c语言·开发语言·算法
Two_brushes.1 小时前
【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
linux·开发语言·网络·tcp/udp
weixin_418813871 小时前
Python-可视化学习笔记
笔记·python·学习
小白学大数据1 小时前
R语言爬虫实战:如何爬取分页链接并批量保存
开发语言·爬虫·信息可视化·r语言
争不过朝夕,又念着往昔1 小时前
Go语言反射机制详解
开发语言·后端·golang
Azxcc01 小时前
C++异步编程入门
开发语言·c++
Danceful_YJ1 小时前
4.权重衰减(weight decay)
python·深度学习·机器学习
Vic101011 小时前
Java 开发笔记:多线程查询逻辑的抽象与优化
java·服务器·笔记