线程与进程有 根本的不同。
每个进程 有其独立的 数据空间,文件描述符,以及进程的ID。
线程共享 一个数据空间,文件描述符,以及进程的ID。
进程间 可以 通过 管道,socket, 信号,退出/等待 以及 运行环境来进行会话。
线程是多个 函数的并发进行,运行在一个独立的进程中,即具有相同的运行环境。 共享全局变量,因此 线程之间的通信 通过更改与读取 全局变量来完成。
然而线程间通信既有用又极危险。表现为记下几点:
(1)共享数据结构
使用malloc, free 管理内存时。 一个线程分配了一块空间存储字符串。当此线程做其他事时,另一个线程使用free将其释放了,并可能用作其他用途了。灾难发生。
(2)共享文件描述符
fork()调用后,产生子进程,文件描述符自动被复制。在子进程中关闭一个从父进程那里继承来的文件描述符之后,此描述符对对父进程仍是打开的,互不影响。
而在多线程中,当同一个文件描述符被两个不同的线程共用时,一个线程函数关闭该文件,则此文件描述符对此进程中的任何线程都是关闭的。然而此时其他线程后续仍需要对此文件描述符的操作。
(3)fork, exec, exit, signals (注意)
所有线程共享一个进程。如果一个线程调用了exec,系统内核用一个新的程序(正确的说应该是 进程--一个运行的程序)取代当前的程序,从而所有正在运行的线程都会消失。
如果一个线程执行了exit(),那么整个进程都将结束运行。同时,若任线程运行导致内存段异常使线程崩溃,都将导致整个进程的崩溃。
多进程中父进程与子进程互不会影响。
信号量的使用将更复杂,随后附上。
互通消息:
对于进程来说,当子进程终止时,父进程调用 wait() ,等待子进程结束,消除僵尸进程。
函数原型:
#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int *status);
进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
而对于线程来说,没有子线程与父线程只说,需通过 进出。
多线程中,主线程可以通过 pthread_join(pid, &status); 阻塞,等待 线程pid 结束,并用status 保存返回值。
同时可以通过 条件变量完成通信。随后附上。
分享到:
相关推荐
"JAVA线程与进程的区别" JAVA语言中,线程(Thread)和进程(Process)是两个基本概念,它们都是操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。但是,它们之间有着本质的区别。 ...
本篇将详细探讨Python中的线程与进程,以及它们与生成器和装饰器的关系。 首先,我们要了解线程与进程的基本概念。进程是操作系统分配资源的基本单位,每个进程都有独立的内存空间。线程则是进程内部的执行单元,...
本文旨在通过一个生动的类比来帮助读者更好地理解进程与线程的基本概念及其差异,并进一步探讨它们在实际应用中的联系与区别。 #### 二、生动形象的类比 为了更好地理解进程与线程,我们可以将计算机比喻成一座工厂...
操作系统实验报告——线程与进程同步,主要探讨了在Linux环境下如何实现进程和线程的同步,以解决经典的生产者-消费者问题。该实验旨在帮助学生掌握操作系统提供的同步机制,并深化对经典同步问题的理解。 实验内容...
#### 进程与线程的区别 1. **资源管理**: - **进程**:每个进程拥有独立的地址空间和资源,这意味着一个进程中的修改不会影响到其他进程。 - **线程**:同一进程内的所有线程共享地址空间和资源,这使得线程之间...
线程与进程是操作系统中两种基本的执行单元,它们各自有着独特的特性和作用。理解这两者的区别对于理解和优化软件性能至关重要。 首先,进程是操作系统分配资源的基本单位,它代表了一个程序在内存中的完整实例。在...
2. **线程与进程的区别**: - 进程间不共享内存,而线程间默认共享内存,通信更高效。 - 创建和销毁进程开销大,线程则小得多。 - 每个进程有独立的代码和数据空间,线程只有一份共享的代码和数据空间。 3. **...
这种机制与传统的线程模型不同,传统的模型中线程是系统级资源管理的基本单位,而Linux将线程视作和普通进程一样,通过共享部分资源的方式来实现多线程操作。 在Linux内核中,并没有专门的线程调度算法或者数据结构...
下面将详细阐述进程与线程之间的区别及其相互作用。 #### 一、进程的概念 进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位。每一个进程都有独立的地址空间和系统资源,包括但不限于内存段、打开的...
三、进程与线程的区别 1. 资源分配:进程拥有独立的资源,而线程共享进程的资源。 2. 创建和销毁:创建和销毁进程的开销较大,而线程的创建和销毁相对快速。 3. 内存模型:进程间内存独立,线程间共享内存。 4. 并发...
#### 三、进程与线程的区别 1. **资源占用**: - **进程**:每个进程都有自己独立的地址空间和其他资源,因此创建和销毁一个进程的开销较大。 - **线程**:同一进程内的线程共享进程的资源,如内存空间、文件句柄...
本实例将深入探讨Qt如何实现线程间通信以及线程与进程间通信,并提供简单易懂的代码示例。 一、Qt线程间通信 Qt通过信号和槽机制,使得线程间的通信变得直观且易于理解。信号是对象状态变化的通知,而槽是响应这些...
这可能需要定时检查进程列表,并比较当前列表与上一次检查时的区别。 2. **监视进程退出**:当监控的进程结束时,我们需要记录这一情况,可能还需要执行某些清理工作,例如释放资源或更新日志。 3. **关闭线程**:...
进程和线程的区别主要表现在以下几个方面: 1. 地址空间和其他资源:进程间是相互独立的,每个进程拥有自己的地址空间和资源,如打开的文件等。而线程则共享所属进程的资源,如内存和I/O设备等。 2. 通信:进程...
三、进程与线程的区别 1. 资源分配:进程有独立的资源,如内存空间;而线程共享进程资源,只有少量私有资源,如栈。 2. 创建和销毁:创建和销毁进程开销较大,而线程的创建和销毁速度快得多。 3. 通信:进程间通信...