前言各行各业都有基本功,例如医生,需要知道人体各个器官、各个系统的作用,知道细胞的作用、细菌和真菌的区别、病毒是怎么形成的,还得知道各种药的作用,如何对症下药等 。
在程序员世界里,也有着体现程序员基本功的东西,例如数据结构、算法、操作系统、网络等,特别是当今互联网,飞速发展下,迅速搞产品快速上线的时代已经不是主流,而且当下行业不景气;大厂们招聘标准上对基本功也是越来越看重,基本功的修炼已经刻不容缓 。
所以,我想通过一种访谈的形式来慢慢揭开程序员各种基本功的细节,分享给一起同行的你们!!
嘉宾介绍
今天我们很荣幸的邀请到了一位JAVA世界的老前辈,ThreadPoolExecutor,Java线程团队Leader,被Doug Lea创造,2004年9月30日18:00PM,随着J2SE1.5的发布后,被大众熟知;在Java世界的15年里,他兢兢业业坚守着自己的岗位,在提高系统多核资源利用方面有着丰富的经验 。采访
作为线程团队的Leader,您是否了解您的团队成员?(ps:什么是线程?)
文章插图
其实我的团队成员都不是我招收进来的,他们都是由我的大BOSS(早期程序员开荒者)招进来;说到了解的话,这就得从我的大BOOS招来的操作系统老大说起;
操作系统指挥我们的程序干活主要靠以下几种算法:
- 先来先服务和短作业(进程)优先调度算法
- 高优先权优先调度算法
- 优先权调度算法:非抢占式优先权算法和抢占式优先权算法
- 高响应比优先调度算法
- 基于时间片的轮转调度算法:时间片轮转法和多级反馈队列调度算法
文章插图
进程是什么?
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动 。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元 。进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成 。介绍完上述的操作系统任务调度方式和进程的概念,我们再来聊聊我的团队成员到底是什么样的存在?
其实有进程就能满足一个程序的正常执行了,那么为什么还需要我和我的团队呢?其实是因为随着计算机的快速发展,对CPU的要求越来越高,进程之间切换的开销较大,已经无法满足越来越复杂的程序的要求了 。我的大BOSS为了能支撑公司的发展,就叫操作系统BOSS去解决这个问题,操作系统BOSS就不得不寻找一种新人才,于是线程就诞生了 。线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位 。 有了线程也不代表代替了进程的地位,操作系统BOSS也比较聪明,让进程来指挥线程,一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间) 。
一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成
您日常的工作有哪些呢?(ps:线程池到底做了什么?)简单的说,我的工作就是来管理线程的,为啥需要管理呢?一般来说,我的团队成员也就那么10几个(ps:CPU密集型一般是N+1,I/O密集型一般是2N+1,其中N是CPU总核数),公司招一个人的成本也是很高的(ps:线程创建时间),而线程们也不会自己干活,他们没事的时候就休息着,等到有任务过来时,我就找正在休息的人来干活 。
- 线程的创建、销毁是非常耗时的,可能比实际执行任务的运行时间还要长 。
- 线程池就是对一定数量的线程保持其存活状态,不让其销毁,有新的任务来了就直接调用空闲线程来执行,这样就可以提升线程的运行效率 。
推荐阅读
- Java 分布式系统如何实现session共享?
- 重学之JavaScript HTML Element 常用API解析
- Java 编写基于 Netty 的 RPC 框架
- 特斯拉Model 3申报图 国产Model 3将搭载磷酸铁锂电池
- 为什么iPhone电池寿命低于80%后,就建议及时更换电池?
- 手机充电“一夜不拔”,对电池到底有没有坏处呢?
- 前端:html+css+javascript 手把手教大家编写贪吃蛇小游戏
- 架构选型之Nodejs与Java
- 如何简单理解 JavaScript 的 Async 和 Await?
- Worker基础知识