线程与进程的区别
一、线程和进程的区别?
程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。
当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
一个进程之内可以分为一到多个线程。
一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行
Java中,线程是调度的最小单位,进程是资源分配的最小单位。再Windows中,进程是不活动的,只是作为线程的容器
二者对比
进程是正在运行的程序的示例,进程中包含了线程,每个线程执行不同的命令
进程使用独立内存,而同一进程内的线程可共享内存。进程间通信(IPC)用于实现进程间交流,线程间则可通过共享内存轻松通信。
线程相对轻量,上下文切换成本通常较低,因为进程由操作系统调度,而线程调度可以由操作系统或线程库(用户空间线程库)进行。
常见的IPC机制包括(Inter-Process Communication,IPC):
管道(Pipes): 管道是一种单向通信机制,允许一个进程的输出成为另一个进程的输入。它是基于文件描述符的,可以用于父子进程通信,或者任意两个有共同祖先的进程之间通信。
消息队列(Message Queues): 消息队列是一种通过消息进行进程间通信的方式。进程可以将消息发送到队列,其他进程则可以从队列中接收这些消息。消息队列提供了一种异步通信的机制。
共享内存(Shared Memory): 共享内存允许多个进程访问同一块物理内存。这使得它们可以直接共享数据,而无需进行显式的消息传递。然而,需要额外的同步机制来避免并发访问问题。
信号量(Semaphores): 信号量是一种计数器,用于多进程之间的同步。它可以用于解决竞态条件和互斥问题。
套接字(Sockets): 套接字是一种在网络上进行通信的机制,但它也可以用于本地进程间通信。本地套接字提供了一种通过网络套接字接口进行通信的方式。
共享文件映射(Memory-Mapped Files): 共享文件映射允许多个进程将同一文件映射到它们的地址空间,从而实现数据的共享。
二、并行和并发的区别
并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事。
并发:一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事