进程和线程

说白了,进程和线程在计算机系统中是两个核心概念,但它们的作用和存在方式大不相同。
其实很简单,进程是程序的执行实体,它是动态的,而线程是进程的组成部分,依托进程存在,是CPU调度的基本单位。

先说最重要的,进程拥有独立的内存空间,比如代码段、数据段、堆和栈,不同进程之间数据不共享。
去年我们跑的那个项目,大概3 000量级,每个进程都有自己的内存空间,这样保证了进程之间的数据隔离。
另外一点,进程的状态有创建、就绪、运行、阻塞、销毁五种,这在复杂系统中尤其关键。

我一开始也以为进程和线程的关系很简单,后来发现不对,它们之间的依赖性很强。
等等,还有个事,线程共享进程的内存空间,可以直接访问相同数据和资源,但需要注意同步和互斥,否则会出现竞争条件。

其实挺坑的,很多初学者容易混淆进程和线程的资源分配。
进程创建时分配的资源相对较多,开销较大,而线程则共享进程资源,创建开销较小。
用行话说叫雪崩效应,其实就是前面一个小延迟把后面全拖垮了。

最后提醒一点,多线程在单处理器系统中通过分时复用实现并发,看似同时进行,实际是串行切换;而在多处理器系统中,多线程可以真正并行执行。
我觉得值得试试,在实际开发中,合理运用进程和线程可以提高程序的执行效率和响应速度。

进程、线程和协程之间的区别和联系

进程是资源分配的最小单位,有独立地址空间。
线程是进程内的执行单元,共享进程资源。
协程是用户态的轻量级任务,在线程内切换。

进程切换开销大,线程切换开销小。
协程切换无内核开销,效率高。

进程间通信复杂,线程间同步通过锁。
协程内部协作,无锁问题。

创建进程开销大,线程开销小。
协程开销极小,线程数越多优势越明显。

线程属于进程,共享进程资源。
协程运行在线程内,利用线程资源。

用交通灯比喻:进程是整条路,线程是车道,协程是车内的换挡。