1. 操作系统/应用程序
2. 操作中的"并发"
3. 其他语言线程、进程
4. Python中线程和进程(GIL锁)
一 、 操作系统/应用程序
1、操作系统:就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。##{主要作用两个1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序}
2、应用程序:程序员写好代码在操作系统上运行(依赖解释器)。###比如QQ、电脑管家、滴滴等等
3、硬件:主板、硬盘、CPU、显卡、内存、电源。
二、操作系统中的并发
并行 : 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;比如去一个地方有多条路(多核的CPU )A 、B可以同时走,到达目的地。
并发 : 并发是指资源有限的情况下,两者交替轮流使用资源,比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。
区别:
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器。
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个程序。
三、其他语言进程与线程(JAVA、c#)
进程定义
狭义定义:进程是正在运行的程序的实例。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
线程定义
定义:出现了能独立运行的基本单位
!!!注意:进程是资源分配的最小单位,线程是CPU调度的最小单位.每一个进程中至少有一个线程。
Java多线程情况下:
- 计算密集型操作:效率高。(主要指一些计算,需占用CPU)
- IO操作: 效率高 (主要进行文件操作,不占用cpu)
四、Python中线程和进程(GIL锁)
Python中线程和进程(GIL锁)
GIL锁又名全局解释器锁。 用于限制一个进程中同一时刻只有一个线程被cpu调度。
扩展:默认GIL锁在执行100个cpu指令(过期时间)。
下面看几道练习题:
1. 应用程序/进程/线程/协程的关系?
多进程:多进程模块multiprocessing来实现,cpu密集型,IO计算型可以用多进程
多线程:多线程模块threading来实现,IO密集型,多线程可以提高效率
协程:依赖于geenlet,对于多线程应用。cpu通过切片的方式来切换线程间的执行,遇到IO操作自动切换,线程切换时需要耗时,
而协成好处没有切换的消耗,没有锁定概念。
进程:是资源管理单位,进行是相互独立的,实现并发和并发
线程:是最小的执行单位,线程的出现为了降低上下文切换的消耗,提供系统的并发性
2. 为什么要创建线程?
由于线程是cpu工作的最小单元,创建线程可以利用多核优势实现并行操作(Java/C#)。
注意:线程是为了工作。
3. 为什么要创建进程?
程和进程之间做数据隔离(Java/C#)。
注意:进程是为了提供环境让线程工作。