7 {, {* e! Q6 u6 l5 K资源利用率,我们上面说到,单个进程存在资源浪费的情况,举个例子,当你在为某个文件夹赋予权限的时候,输入程序无法接受外部的输入字符,只能等到权限赋予完毕后才能接受外部输入。综合来讲,就是在等待程序时无法执行其他工作。如果在等待程序的同时可以运行另一个程序,那么将会大大提高资源的利用率。(资源并不会觉得累)因为它不会划水~" L( s. v( U5 A4 n% I( i# j, w
公平性,不同的用户和程序对于计算机上的资源有着同样的使用权。一种高效的运行方式是为不同的程序划分时间片使用资源,但是有一点需要注意,操作系统可以决定不同进程的优先级,虽然每个进程都有能够公平享有资源的权利,但是每次前一个进程释放资源后的同时有一个优先级更高的进程抢夺资源,就会造成优先级低的进程无法获得资源,久而久之会导致进程饥饿。( m( x% d& R$ k# \; ]* E
便利性,单个进程是无法通信的,通信这一点我认为其实是一种避雷针策略,通信的本质就是信息交换,及时进行信息交换能够避免信息孤岛,做重复性的工作;任何并发能做的事情,顺序编程也能够实现,只不过这种方式效率很低,它是一种 阻塞式 的。- e5 H* C) k. s
但是,顺序编程(也称为串行编程)也不是一无是处的,串行编程的优势在于其直观性和简单性,客观来讲,串行编程更适合我们人脑的思考方式,但是我们并不会满足于顺序编程,we want it more!!! 。资源利用率、公平性和便利性促使着进程出现的同时也促使着线程的出现。 4 h. l) r) L8 S8 u$ @; T. P5 t- x2 x8 ?4 X7 J9 W7 D2 N4 j
1 T! ] p" q- ^+ o
如果你还不是很理解进程和线程的区别的话,那么我就以我多年操作系统的经验(吹牛逼,实则半年)来为你解释一下:进程是一个应用程序,而线程是应用程序中的一条顺序流。& m) r$ i7 B, ]% g2 ?( t, v
2 P8 K; y! b4 k5 r+ G) @* u* z# n& r* Y9 Q+ Z3 M! V$ L, o. N
+ Q: T" [# e# @2 u7 S4 Q
. e2 m3 C# g5 F: G( |, O2 C) }- x
, X) X4 @* e8 R' T
$ |, n9 p/ Q" k# ^; {+ B; G2 K& v% L8 q% I, v7 n, A! I
9 u. h1 M; P) {5 V U
' k5 T; c3 t0 P9 D. ^
! e6 \! ?* R7 m) Z! o, p. r) U
线程会共享进程范围内的资源,例如内存和文件句柄,但是每个线程也有自己私有的内容,比如程序计数器、栈以及局部变量。下面汇总了进程和线程共享资源的区别4 M0 _1 s6 y+ N$ _- ?
1 K/ `% Q, K3 _
q8 s A# H- z6 n6 B; B
2 p ^6 C# j0 Q- m0 C 8 E. g* m- r" ]9 D( \# G. _! [- r 9 x2 h" x! ?. z+ t 2 D8 I# Y# s( O" m' SCPU 内部是寄存器的构造,寄存器的访问速度要高于高速缓存,高速缓存的访问速度要高于内存,最慢的是磁盘访问。 " I: r, {$ U( F; n8 L( V* h I * _/ g4 ^* G+ S5 n 9 ~/ ^2 k. [( x7 ^" B; z- s d程序是在内存中执行的,程序里大部分语句都要访问内存,有些还需要访问 I/O 设备,根据漏桶理论来说,程序整体的性能取决于最慢的操作也就是磁盘访问速度。 : {4 C0 v) N7 A. r- Y( a+ x _; S" _& d
! Y, e+ h" ~* v2 P
因为 CPU 速度太快了,所以为了发挥 CPU 的速度优势,平衡这三者的速度差异,计算机体系机构、操作系统、编译程序都做出了贡献,主要体现为: " L1 H! y# L) p* r5 Y. B & F( ~( D& X- M/ ~) f1 u; s + R9 v/ s# G8 Z4 ]) G7 SCPU 使用缓存来中和和内存的访问速度差异 6 C/ W7 e. S$ F( c5 I操作系统提供进程和线程调度,让 CPU 在执行指令的同时分时复用线程,让内存和磁盘不断交互,不同的 CPU 时间片 能够执行不同的任务,从而均衡这三者的差异 0 b* m. \' V c( M7 Y+ W编译程序提供优化指令的执行顺序,让缓存能够合理的使用6 G+ i. w, n2 V7 h; \' C' t
我们在享受这些便利的同时,多线程也为我们带来了挑战,下面我们就来探讨一下并发问题为什么会出现以及多线程的源头是什么8 [+ \0 J. a' N2 S( Q& e
4 v7 r/ t" g2 `3 h) P - r2 h4 G6 ?$ o( X2 `8 T9 @总结* L: a7 S5 S" ^7 {$ K
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。 0 e j# m- z8 p A/ A, \ + S5 H0 Q8 D% H" K) I$ F. Y6 ~3 ~2 u+ E9 h( N0 E7 j, z7 S( Q
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!如果你需要这份完整版的面试真题笔记,只需你多多支持我这篇文章。* c& h- [! i+ n1 y1 P' `% J
———————————————— ( S( t0 V7 }9 } ]' F! @版权声明:本文为CSDN博主「m0_58397045」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 + v$ w& a, w6 U' n" t% L原文链接:https://blog.csdn.net/m0_58397045/article/details/119215049$ B; b) ?( A2 I2 r7 Z# a+ Z' Q5 U
4 F/ c5 o. x) x$ t, T( R' j