秋招知识点总结——多线程

1.线程和进程

这是一个很基础的知识点,考察的是对基础的掌握情况

  • 进程 是系统进行资源分配和调度的一个独立单位
  • 线程 是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其它资源

进一步的,我们需要知道二者的区别,即为啥要多线程?

原因是:线程上下文的切换比进程上下文切换快

原理是因为:线程切换仅需要保存和设置少量的寄存器内容,而进程之间的切换;涉及到当前进程的 CPU 环境的保存和新被调度运行进程的 CPU 环境的设置。

拓展问题:进程之间如何通信?线程之间如何通信?

  • 进程之间依靠 管道(pipes) 或者 套接字(sockets) 等IPC进行通信
  • 线程之间依靠 JVM 提供的 API,例如 wait()、notify()、notifyAll() 等进行通信

2.为什么要用多线程

很多人包括我在内初学多线程时,都会误以为这个问题的回答 就是 多线程速度快效率高 其实不止这一点,如果你对多线程的特点只能想到这一点,那么说明对于这个问题的理解还不够透彻。

首先我们要明确一点,多线程也是有很多隐患的,不是十全十美的。

(1)资源利用率高

它可以充分的将各个模块都使用起来,我们可以理解为 流水线的工作

举个例子:我们对本地文件的处理过程;

 1.读取本地文件A				2S
 2.复制本地文件A到新地址		2S
 3.删除原地址的本地文件A		2S
 4.读取本地文件B				2S
 5.复制本地文件B到新地址		2S
 6.删除原地址的本地文件B		2S
 
 总计用时 12S

但是如果我们采用多线程的方法来做的话:

 1.读取本地文件A				2S
 2.复制本地文件A到新地址	 读取本地文件B	2S
 3.删除原地址的本地文件A	 复制本地文件B到新地址	2S
 4.						 删除原地址的本地文件B		2S

总计时间 8S

类比一下,如果工作量十分庞大的话,多线程在资源利用率上的优势会更加显著

(2)程序设计可能会变得简单

在单线程应用程序中,如果你想编写程序手动处理上面所提到的处理顺序,你必须记录每个文件处理的状态;

但是多线程的话,你可以启动两个线程,每个线程处理一个文件的操作。线程会在等待磁盘读取文件的过程中被阻塞;

其他的线程能够使用CPU去处理以及读取过的文件,进行后续操作;

其结果就是,磁盘总是在繁忙地读取不同的文件到内存中。这会带来磁盘和CPU利用率的提升。而且每个线程只需要记录一个文件,因此这种方式也很容易编程实现。

(3)程序速度快

对数据进行处理时,我们可以将部分操作分配给其他线程,同步进行;

这里我们可以参考一下统筹法的思想:

例如:早上起床,想泡壶茶喝。
当时情况是:开水没有,开水壶、茶壶、茶杯要洗,火已升了,茶叶也有了,怎么办?

方法一 洗水壶,灌水,放在火上;等水烧开的时间,洗茶壶、茶杯,放茶叶;等水烧开了,泡茶喝。

方法二 洗水壶,洗茶壶、茶杯,放茶叶;灌水,放在火上;等水烧开了,泡茶喝。

显然方法一更快一些,这就是多线程的好处。

注意点:多线程不一定是最快的,因为线程有创建和上下文切换的开销。

3.线程的状态

图片转自:http://zy19982004.iteye.com/blog/1626916
在这里插入图片描述
未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值