在引入线程的操作系统中,资源分配和调度的基本单位是什么?进程还是线程?为什么?

什么是线程?简述进程与线程的关系

说白了,线程就是进程中进行特定操作的“小工人”,系统主要依靠它们来发挥作用。
这件事因资源共享和同步而变得复杂,但有两个核心点:第一,谁将“使用”资源,第二,谁将首先使用CPU。

先说最重要的资源共享。
我们去年运行的项目发现后台处理进程挂起,所有线程都必须停止。
用行话来说,这称为雪崩效应。
事实上,前面的一点点延迟就让一切都落后了。
当时我以为有一个隔离机制就够了,但后来发现这是错误的,因为内存和文件句柄必须整齐地转移到新线程中,而没有现成的模板。
还有一点就是线程同步。
例如,在视频播放场景中,解码线程和显示线程必须齐头并进,图像将在几毫秒内冻结。
我们使用信号量来锁定一段时间,但发现像CPU这样的资源也需要配合,否则就被浪费了。
还有另一个关键细节。
例如,当有3 000个并发请求时,单进程多线程的性能比多进程高3 0%。
然而,有几个流程可以隔离风险。
许多人不注意这一点。

一开始我认为线程越多越好,但后来发现这是错误的,因为线程交换本身也有开销,所以使用少于8 个线程更合理。
等等,那是另一回事了。
不同进程中线程通信的成本比同一进程高一两个数量级。
在执行分布式处理时必须仔细考虑这一点。

不建议盲目堆线程数,而是先跑个压力测试看看最佳配置。