" \5 `' p% L) f' g# [; }3 U+ _& b9 J6 S1 r C; v
, Y( ^8 H3 S8 x2 R8 b( k R- p
" Z" E' `0 @. b) b' t
线程被描述为一种轻量级的进程,轻量级体现在线程的创建和销毁要比进程的开销小很多。, ~# \3 h4 {9 H; N7 t6 f2 c4 v
0 N, K Y; k9 t4 t$ d / P+ ^" Q, c! s% y* F注意:任何比较都是相对的。 ) V: `) O0 L2 b5 J , `5 F- R- B# D' g. ?5 E& v) g" ~. k: [; ^
在大多数现代操作系统中,都以线程为基本的调度单位,所以我们的视角着重放在对线程的探究。 4 r o: _8 r# I& v( g9 [7 E2 A! e) X0 s" ~
$ v/ ~0 u& X9 e1 s % r6 Z$ L$ {. LJava 很好的在用户空间实现了开发工具包,并在内核空间提供系统调用来支持多线程编程,Java 支持了丰富的类库 java.util.concurrent 和跨平台的内存模型,同时也提高了开发人员的门槛,并发一直以来是一个高阶的主题,但是现在,并发也成为了主流开发人员的必备素质。' d; e' v1 F$ j9 A# n" ?9 t
. e0 V. ?6 B4 P3 B2 i( K 7 R& {2 t( g1 G! }9 G虽然线程带来的好处很多,但是编写正确的多线程(并发)程序是一件极困难的事情,并发程序的 Bug 往往会诡异地出现又诡异的消失,在当你认为没有问题的时候它就出现了,难以定位 是并发程序的一个特征,所以在此基础上你需要有扎实的并发基本功。那么,并发为什么会出现呢?8 ?% S+ u0 Q }: A+ T* d
( _$ a5 e5 H# q% R7 c' M5 q
1 M" i* u' |2 F. W. l# a
为什么是并发3 W9 K! Q5 L$ w8 b9 t a# |1 G: \
计算机世界的快速发展离不开 CPU、内存和 I/O 设备的高速发展,但是这三者一直存在速度差异性问题,我们可以从存储器的层次结构可以看出0 Z; c/ @( t% P* v7 K; y
& L' S5 E9 X9 c q8 d0 B# \; N
4 u0 n, G8 }$ k! y! J1 H+ \6 n9 j1 F& \: {7 ]9 Z. v. q; R
" S5 C6 f+ R. Y. ^! d! k1 [ ( O1 N- s1 [6 o0 W o# L P* u h9 n7 |+ a
CPU 内部是寄存器的构造,寄存器的访问速度要高于高速缓存,高速缓存的访问速度要高于内存,最慢的是磁盘访问。1 m4 y: j! _3 A* a4 Y" c" D5 l! z
, d3 A2 }- L3 ^9 J! o! o$ B3 F: H$ O3 X$ A$ N
程序是在内存中执行的,程序里大部分语句都要访问内存,有些还需要访问 I/O 设备,根据漏桶理论来说,程序整体的性能取决于最慢的操作也就是磁盘访问速度。: F s! I/ k1 y4 Z- d9 Y
! s+ \! E# T7 ?7 S# X1 K& t p. X! t( t. V4 h" v$ N2 M' U8 D
因为 CPU 速度太快了,所以为了发挥 CPU 的速度优势,平衡这三者的速度差异,计算机体系机构、操作系统、编译程序都做出了贡献,主要体现为:$ V1 C! o' B* a7 E; W1 C1 q! f
. F. P/ ^- ]2 v5 g; I Z7 a
8 V% c. z+ P/ s" R: O" h
CPU 使用缓存来中和和内存的访问速度差异4 x' \' ^1 k# P& W
操作系统提供进程和线程调度,让 CPU 在执行指令的同时分时复用线程,让内存和磁盘不断交互,不同的 CPU 时间片 能够执行不同的任务,从而均衡这三者的差异9 M* |- }+ _% o* ^9 \/ l0 M
编译程序提供优化指令的执行顺序,让缓存能够合理的使用9 `4 P; L1 @9 O& |8 I/ e7 G! A
我们在享受这些便利的同时,多线程也为我们带来了挑战,下面我们就来探讨一下并发问题为什么会出现以及多线程的源头是什么; V! n- W# e3 [: k4 K- P; d! f! n
& a0 f* r5 L% E3 z0 J: n" ^
& E& P+ U. F [3 c& N$ f
总结) O. C" E% D, w3 ~% a. N: W; R5 ?
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。 7 x, _( a* D% Y , u5 f) W% Z, J1 [; s& d& ?$ V1 Q+ i: x$ G
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!如果你需要这份完整版的面试真题笔记,只需你多多支持我这篇文章。! Y' r( |/ h7 D9 p7 \4 M
———————————————— 6 `0 _9 W9 N6 z; a( C; ]版权声明:本文为CSDN博主「m0_58397045」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# u2 o* U& m+ r, b M3 n1 T9 d9 B
原文链接:https://blog.csdn.net/m0_58397045/article/details/119215049' I+ N0 ]& M F5 _/ i! \) x! S2 s* v