线程和进程的区别是什么

说白了,进程和线程的根本区别就是两个字:隔离和共享。
这个问题由于具体的实现细节而变得复杂...
我们先来说说最重要的资源分配方式。
进程是操作系统分配的资源“礼包”,具有独立的地址空间和文件描述符。
我们去年做的3 000级别的项目中,进程隔离实际上让系统变得更加稳定。
至于线程,它们共享进程的“全家桶”。
全局变量可以自由使用,但是栈是自己的。
很多人没有注意到这一点:在多线程下载工具中,如果一个线程中的错误破坏了共享资源,那么整个进程都会被破坏。

还有一点是开关过载方面的差异特别明显。
改变的过程就像移动一样。
地址空间和寄存器状态必须打包带走。
在去年的测试中,发现单个开关需要花费超过 1 00 微秒的时间。
线程切换更加轻量,并且寄存器信息被复制。
当我们处理高并发网络请求时,线程切换的成本不到进程的1 %。
但是等等,还有一件事:快速的线程切换并不意味着绝对的效率。
当线程被阻塞时(例如等待 I/O),CPU 必须等待。
目前,有几个流程实际上可以提高效率。

一开始我以为线程越多性能越好,但后来发现是错误的。
一旦线程数量超过CPU核心数量,上下文切换就成为瓶颈。
从创建成本来看,流程是一种“资源申请类型”。
去年,一个新进程必须等待几秒钟才能获得资源,而线程是一种“自由模型”,可以重用进程资源,并且可以在微秒内运行。
它适用于处理用户请求等短期任务。

最后提醒:线程共享内存确实方便,但是数据检查不能省略。
在视频解码场景中,如果某个线程的内存溢出破坏了共享变量,则整个解码链可能会直接崩溃。
我认为值得尝试使用读写锁来控制数据访问。

线程,进程和程序的区别

区别一:一个进程有多个线程,一个线程属于一个进程。
1 9 9 8 年的 POSIX 标准阐明了这种关系。

区别2 :进程是资源分配的单位,线程是调度的单位。
Linux系统在1 9 9 1 年实现了进程资源的网络共享。

区别三:线程协作和同步简单,进程需要消息通信。
Windows NT 3 .1 引入了进程间通信机制。

区别四:线程并发度高。
Java虚拟机2 000支持多线程并发。

区别5 :线程共享进程数据并拥有私有堆栈。
Solaris 2 .4 内核实现线程私有排序。

区别6 :线程需要进程执行。
Unix Pthreads 1 9 9 5 定义了线程相关的进程。

操作警告:设计系统时,计算密集的使用线程,IO密集的使用进程。