带妹进大厂,先学会多线程!!!
想知道为什么要使用多线程,我们应该先了解进程与线程的概念以及关系
再去知道多线程是什么?为什么要使用多线程?使用多线程的优点
进程
进程是什么
- ①进程是指在系统中正在运行的一个应用程序,程序一旦运行就是进程。
- ②进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间
- 一是指程序在运行,就是进程;二是指要给进程分配资源,分配空间
- 我们看每一个进程就是一个运行着的程序都占据着CPU,内存,都拥有独立的地址空间
进程的分类
根据特点分类
- ①交互进程:是由shell启动的进程,它既可以在前台运行,也可以在后台运行。交互进程在执行过程中,要求与用户进行交互操作。简单来说就是用户需要给出某些参数或者信息,进程才能继续执行。
- ②批处理进程:与windows原来的批处理很类似,是一个进程序列。该进程负责按照顺序启动其它进程。
- ③守护进程:是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,直到系统关闭时才停止运行。而某些守护进程只是在需要时才会启动,比如FTP或者Apache服务等,可以在需要的时候才启动该服务。
- 解释:交互进程是和用户进行交互,得到用户的请求;批处理进程目的是给其它进程按照顺序启动;守护进程是特殊的进程,大部分随着系统开启和关闭,有的是需要时启动。
根据状态分类
- ①守护进程:所有守护进程都可以超级用户(用户ID为0)的优先权运行;守护进程没有控制终端;守护进程的父进程都是init进程(即1号进程)。但是,并非所有在后台运行的进程都是守护进程,因为我们可以使用符号“&”来使进程在后台运行。比如:./bin/process_test &,执行该条命令后,相应的进程在后台运行。
- ②孤儿进程:一个父进程退出后,它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。
- ③僵尸进程:一个子进程结束但是没有完全释放内存(在内核中的 task_struct没有释放),该进程就成为僵尸进程。当僵尸进程的父进程结束后该僵尸进程就会被init进程所收养,最终被回收。僵尸进程会导致资源的浪费,而孤儿进程不会。
- 解释:守护进程父进程是init进程;孤儿进程父进程退出它就会被init进程收养;僵尸进程是此进程结束了内存还占着就是僵尸进程,父进程结束才被init进程收养
- init进程:Android 内核加载完成后,就会启动init进程,init进程是Android系统用户空间的第一个进程。init进程刚开始运行的时候是内核态,它属于一个内核线程,然后运行一个用户态下面的程序后,把自己强行转成用户态
进程和线程的联系
线程
- 每个进程中至少包含一个线程,而这些线程都在共享进程的资源空间等,当线程发生变化的时候只会引起CPU执行的过程发生变化,不会改变进程所拥有的资源。
- 同理一个程序中至少包含一个进程。线程是进程中执行运算的最小单位,亦是执行处理机调度的基本单位
进程
- 每个进程都有自己的地址空间,资源如:内存,I/O,CPU,同一个进程里的线程共享本进程里的地址空间,不能使用别人家进程的地址空间。
- 由于进程的独立性,当某一个进程崩溃之后,在保护模式下不会对别的进程进行影响。
- 进程是资源分配的基本单位,运行调度的基本单位,系统中并发执行的单位。
多线程
什么是多线程
串行
串行:相对于单条线程来执多个任务
举例:比如下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是说,必须等下载完A之后才能开始下载B,它们在时间上是不可能发生重叠的。
并行
并行:下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的,在同一时刻发生的,并行在时间上是重叠的。
定义
多线程就是指一个进程中同时有多个执行路径(线程)正在执行。
举例:打开腾讯管家,腾讯管家本身就是一个程序,也就是说它就是一个进程,它里面有很多的功能,我们可以看下图,能查杀病毒、清理垃圾、电脑加速等众多功能。
- 按照单线程来说,无论你想要清理垃圾、还是要病毒查杀,那么你必须先做完其中的一件事,才能做下一件事,这里面是有执行顺序。
- 如果是多线程的话,我们其实在清理垃圾的时候,还可以进行查杀病毒、电脑加速等等其他的操作,这个是严格意义上的同一时刻发生,没有执行上的先后顺序。
为什么要使用多线程(目的)
- 在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。
- 可以提高程序的效率。
- 在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。
使用多线程的过程
- 线程是操作系统调度的最小单元,它可以让一个进程并发地处理多个任务,也叫轻量级进程。
- 在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈、局部变量,并且能够共享进程内的资源。
- 总结:操作系统可以同时执行多个任务,每个任务就是一个进程。进程可以同时执行多个任务,每个任务就是一个线程。一个程序运行之后至少有一个进程,而一个进程可以包含多个线程,但至少要包含一个线程。
多线程中的执行是并发的和并行的
- 并发执行:如果处理器可以在单个处理器上的多线程进程中的线程之间切换执行资源,则可以说它是并发执行。
- 并行执行:当进程中的每个线程可以在同一多线程进程中同时在单独的处理器上运行时,则被称为并行执行。
使用多线程的优点
- 更多的CPU核心 现代计算机处理器性能的提升方式,已经从追求更高的主频向追求更多的核心发展,所以处理器的核心数量会越来越多,充分地利用处理器的核心则会显著地提高程序的性能。而程序使用多线程技术,就可以将计算逻辑分配到多个处理器核心上,显著减少程序的处理时间,从而随着更多处理器核心的加入而变得更有效率。
- 更快的响应时间 我们经常要针对复杂的业务编写出复杂的代码,如果使用多线程技术,就可以将数据一致性不强的操作派发给其他线程处理(也可以是消息队列),如上传图片、发送邮件、生成订单等。这样响应用户请求的线程就能够尽快地完成处理,大大地缩短了响应时间,从而提升了用户体验。
- 更好的编程模型 Java为多线程编程提供了良好且一致的编程模型,使开发人员能够更加专注于问题的解决,开发者只需为此问题建立合适的业务模型,而无需绞尽脑汁地考虑如何实现多线程。一旦开发人员建立好了业务模型,稍作修改就可以将其方便地映射到Java提供的多线程编程模型上。
- 总结:CPU多;响应时间短;多线程有模型容易编程
为什么使用多线程大致就讲清楚了
想要带妹进大厂,只能夯实基础,一次一次的巩固知识!!!