IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 进程与线程的联系和区别? -> 正文阅读

[Java知识库]进程与线程的联系和区别?

什么是进程?

什么是线程?

进程与线程的区别?

为何不使用多进程而是使用多线程?

进程间通信的方式

一、管道通信

(1)无名管道

(2)命名管道(FIFO)

二、信号

三、消息队列

四、共享内存(shared memory)+?信号量(semaphore)

五、套接字(socket)


什么是进程?

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体

进程一般由程序数据集合进程控制块三部分组成。

程序用于描述进程要完成的功能,是控制进程执行的指令集

数据集合是程序在执行时所需要的数据和工作区

程序控制块PCB包含进程的描述信息和控制信息是进程存在的唯一标志。

什么是线程?

线程是进程中执行运算的最小单位,是进程中的一个实体,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源

一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

线程程序执行的最小单位,而进程是操作系统分配资源的最小单位。

进程与线程的区别?

(1)线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位

(2)一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

(3)进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见!

(4)调度和切换:线程上下文切换比进程上下文切换要得多。

为何不使用多进程而是使用多线程?

线程廉价,线程启动比较快退出比较快,对系统资源的冲击也比较小,而且线程彼此分享了大部分核心对象(File Handle)的拥有权。

如果使用多重进程,但是不可预期,且测试困难。

进程间通信的方式

一共有6种方式:

一、管道通信

管道(pipe)分为无名管道有名管道无名管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

(1)无名管道

管道为半双工的;
管道只能在具有公共祖先的两个进程之间使用,通常,一个管道由一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了。

管道通过pipe函数创建

#include<unistd.h>
int pipe(int fd[2]);      //成功返回0,出错返回-1

父进程的fd[1]端的输出通过管道可以连接到子进程的fd[0]端,从而实现通信。

(2)命名管道(FIFO)

FIFO其实是一种文件类型,创建FIFO类似于创建文件

shell命令使用FIFO将数据从一条管道传送到另一条管道时,无须创建中间的临时文件

客户进程-服务器进程应用程序中,FIFO用作汇聚点,在客户进程和服务器进程二者之间传递数据。

二、信号

信号(signal)是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。

三、消息队列

消息队列(message queue):是消息的链接表,它克服了上两种通信方式中信号量有限的缺点

具有写权限的进程可以按照一定得规则向消息队列中添加新信息;

对消息队列有读权限的进程则可以从消息队列中读取信息。

msgget用于创建一个新的消息队列或打开一个现有队列。

msgsnd用于将新消息添加到队列尾端。

msgrcv用于从队列中去消息。

#include<sys/msg.h>
int msgget(key_t key, int flag);  

int msgsnd(int msqid, const void *ptr, size_t nbytes, int flag);  

ssize_t msgrcv(int msqid, void *ptr, size_t nbytes, long type, int flag);

我们并不一定以先进先出的顺序取消息,可以按照消息的类型字段取消息。?

四、共享内存(shared memory)+?信号量(semaphore)

可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。

主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。

五、套接字(socket)

这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:36:51  更:2022-04-14 23:42:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:24:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码