以下是个人见解,总结笔记。
线程
- 一颗CPU核心通常只有一个线程,使用超线程技术的InterCPU除外。
- Inter的超线程技术可以把一个CPU物理内核模拟成两个虚拟内核(两线程),所以一个物理内核可以有两个线程并行,两个线程共享CPU资源,当两个线程同时需要使用某一资源时,其中一个需要让步。
- 一颗CPU核心可以开启多个线程,但在任意时刻只有一个线程在执行,当线程停止使用资源时切换其它线程执行,多线程就是多个线程切换执行以提高CPU利用率,达到加快程序执行的效果。
- 多线程更适合用于I/O密集型程序。
- Python虚拟机使用全局解释器锁(GIL)来保证任意时刻只有一个线程运行。
锁
摘自《Python核心编程》的解释 一般在多线程代码中,总会有一些特定的函数或代码块不希望(或不应该)被多个线程同时执行,通常包括修改数据库、更新文件或其他或产生竞态条件的类似情况。这就是需要使用同步的情况。当任意数量的线程可以访问临界区的代码但在给定时刻只有一个线程可以通过时,就是使用同步的时候。程序员使用适合的同步原语,或者线程控制机制来执行同步。
锁是Python的同步原语之一,当需要同步的时候不执行同步,会出现输入输出或数据结构改变的混乱,I/O和访问相同数据结构都属于临界区,因此需要用锁来防止多个线程同时进入临界区,也就是说要保证任意时刻只有一个线程执行I/O和修改数据。
Queue
队列是一种对待处理任务的机制,遵循先进先出的原则。可用于线程间共享数据。