一 什么是线程
二: 线程的创建开销下
三:线程与进程的区别
四: 为何要用多线程
五:多线程的应用举例
六:经典的线程模型(了解)
七:POSIX线程(了解)
八: 在用户空间实现的线程(了解)
九: 在内核空间实现的线程(了解)
十: 用户级和内核级线程的对比(了解)
十一:混合实现(了解)
一:什么是线程
在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程
线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程就是一个进程
车间负责把资源整合到一起,是一个资源单位,而一个车间至少有一条流水线
流水线的工作需要电源,电源相当于cpu
所以,进程只是用来把资源集中到一起(进程知识一个资源单位,或者说是资源集合),而线程才是cpu上的执行单位
多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享进程的地址空间。相当于一个车间有多个流水线,都公用一个车间的资源
例如:北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路啦
二:线程的创建开销小
创建进程的开销要远大于线程
如果我们的软件是一个工厂,该工厂有多条流水线,流水线工作需要电源,电源只有一个即单核的cpu
一个车间就是一个进程,一个车间至少有一条流水线(一个进程至少一个线程)
而建线程,就只是在一个车间内造一条流水线,无需再申请空间,所以创建开销小
进程之间是竞争关系,线程之间是协作关系
车间之间是竞争的关系,竞争(不同的进程之间是竞争关系,是不同的程序员写的程序运行的,迅雷抢占其他进程的网速,360把其他进程当做病毒干死)
一个车间的不同流水线是协同工作的关系(同一个进程的线程之间是合作关系,是同一个程序写的程序内开启动,迅雷内的线程是合作关系,不会自己干自己)
三:进程与线程的区别
一堆英文
四:为何要用多线程
多线程指的是。在一个进程内开启多个线程,简单的讲:如果多个任务公用一个地址空间,那么必须在一个进程内开启多个线程。
详细的讲分4点:
1 多线程共享一个进程的地址空间
2 线程比进程更轻量级,线程比进程更容易创建可撤销。,在许多操作系统中,创建一个线程比创建一个进程要快10-100倍。在有大量线程需要动态和快速修改时,这一特性很有用
3 若多个线程都是cpu密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的IO处理,拥有多个线程允许这些活动颁奖词重叠运行,从而会加快程序执行的速度
4 在多个cpu系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多(这一条并不适用于python)
五:多线程的应用举例
pass
六:经典的线程模型(了解)
多个线程共享有一个进程的地址空间中的资源,是对一台计算机上多个进程的模拟,又是也程线程为轻量级的in成
二队一台计算机上对个进程,则共享物理内存,磁盘,打印机等其他物理资源
多线程的运行跟对行程的运行类似,是cpu在多个线程之间的快速切换
不同的进程之间是充满第一的,彼此是抢占,竞争cpu的关系,如果迅雷回和qq抢资源,而同一个进程是由一个程序员的程序创建,所有同一个进程内的线程是合作关系,一个吸纳成可以访问灵位一个线程的内存地址,大家都是共享的,一个线程干死了另外一个线程的内存,那纯属程序员脑子有问题
类似于进程,每个线程也有自己的堆栈(相当于竖起的管道,我自己想的 后进先出)
不同于进程,线程库无法利用时钟中断强制线程让出cpu,可以调用thread_yield运行线程自动放弃cpu,让另外一个线程运行。
线程通常是有益的,但是带来了不少程序设计难度,线程的问题是:
1 父进程有多个线程,那么开启的子线程是佛需要同样多的线程
如果是,那么附近中某个线程被阻塞,那么copy到子进程后,copy版的线程也要被阻塞吗,想想nginx的多吸纳成模式接收用户连接
2 在同一个进程中,如果一个线程关闭了问题,而灵位一个线程正准备往该文件内写内容呢?
如果一个线程注意到没有内存了,并开始分配更多的内存,在工作一半时,发生线程切换,新的线程也发现内存不够用了,又开始分配更多的内存,这样内错就被分配了多次,这些问题都是多线程编程的经典问题,需要仔细思考和设计
七:POSIX线程(了解)
pass
八:在用户空间实现的线程(了解)
pass
九:在内核空间实现的线程(了解)
pass
十:用户级与内核级线程的对比(了解)
pass
十一:混合实现(了解)
pass